我有一个班级用户。用户可以与许多其他用户成为朋友。这种关系是相互的。如果A是B的朋友,那么B是A的朋友。我也希望每个关系都存储其他数据,例如两个用户成为朋友的日期。因此,这是同一表上具有多列的多对多关系。我知道应该创建一个中产阶级友谊(包含两个用户ID和日期列)。但是我在将其与Hibernate映射时做得不够。使我停滞不前的是映射到了同一张表。如果多对多关系是在两个不同的表之间,则可以解决。
你说过
同一张桌子上的* 多对多关系 *
这不是一个好主意。这是一场噩梦。
试试这个
@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 } } }
问候,