在同一张桌子上多对多地添加列 [英] Many-to-many on the same table with additional columns
问题描述
多对多关系在同一张桌子上
这不是一个好主意。这是一个噩梦维持。
尝试这一个,而不是
@Entity
public class Friend {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer friendId;
@Column
私人字符串名称;
@OneToMany(mappedBy =我)
私人列表< MyFriends>我的朋友;
}
@Entity
public class MyFriends {
@EmbeddedId
MyFriendsId id;
@Column
private String additionalColumn;
@ManyToOne
@JoinColumn(name =ME_ID,insertable = false,updateable = false)
private Friend me;
@ManyToOne
@JoinColumn(name =MY_FRIEND_ID,可插入= false,可更新= false)
私人朋友myFriend;
@Embeddable
public static class MyFriendsId implements Serializable {
@Column(name =ME_ID,nullable = false,updateable = false)
私人整数meId;
@Column(name =MY_FRIEND_ID,nullable = false,updateable = false)
private Integer myFriendId;
$ b $ public boolean equals(Object o){
if(o == null)
return false;
if(!(o instanceof MyFriendsId))
return false;
MyFriendsId other =(MyFriendsId)o;如果(!(other.getMeId()。equals(getMeId()))
返回false;
if(!(other.getMyFriendId()。equals(getMyFriendId )))
返回false;
返回true;
}
public int hashcode(){
// hashcode impl
$ b}
问候,
I have a class User. A user can be a friend with many other users. The relationship is mutual. If A is a friend of B then B is a friend of A. Also I want every relation to store additional data - for example the date when two users became friends. So this is a many-to-many relationship on the same table with additional columns. I know that a middle class Friendship should be created(containing two user ids and column for the date). But I am coming short at mapping this with Hibernate. The thing that stops me is that the mapping is to the same table. I can solve it, if the many-to-many relationship was between two different tables.
You have said
many-to-many relationship on the same table
It is not a good idea. It is a nightmare to maintain.
Try this one instead
@Entity
public class Friend {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer friendId;
@Column
private String name;
@OneToMany(mappedBy="me")
private List<MyFriends> myFriends;
}
@Entity
public class MyFriends {
@EmbeddedId
private MyFriendsId id;
@Column
private String additionalColumn;
@ManyToOne
@JoinColumn(name="ME_ID", insertable=false, updateable=false)
private Friend me;
@ManyToOne
@JoinColumn(name="MY_FRIEND_ID", insertable=false, updateable=false)
private Friend myFriend;
@Embeddable
public static class MyFriendsId implements Serializable {
@Column(name="ME_ID", nullable=false, updateable=false)
private Integer meId;
@Column(name="MY_FRIEND_ID", nullable=false, updateable=false)
private Integer myFriendId;
public boolean equals(Object o) {
if(o == null)
return false;
if(!(o instanceof MyFriendsId))
return false;
MyFriendsId other = (MyFriendsId) o;
if(!(other.getMeId().equals(getMeId()))
return false;
if(!(other.getMyFriendId().equals(getMyFriendId()))
return false;
return true;
}
public int hashcode() {
// hashcode impl
}
}
}
regards,
这篇关于在同一张桌子上多对多地添加列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!