1
我想在用戶模型之間創建一種「友誼」關係。我還需要爲每一個友誼增加一個專欄。我知道我需要使用聯合類與複合主鍵。這就是我的User類使用JPA 2.0添加列的Many ManyToMany
public class User implements Serializable {
@Id
@Basic(optional = false)
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@OneToMany(mappedBy="friendA")
private Set<Friendship> friends;
我也有FriendshipId類
@Embeddable
public class FriendshipId implements Serializable {
private long friendAId;
private long friendBId;
}
最後友誼類
@Entity
@IdClass(FriendshipId.class)
public class Friendship implements Serializable {
private Integer friendAId;
private Integer friendBId;
@Basic(optional = false)
@Column(name="date_added")
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime date_added;
@ManyToOne
@PrimaryKeyJoinColumn(name="friendAId", referencedColumnName="friendAId")
private User friendA;
@ManyToOne
@PrimaryKeyJoinColumn(name="friendBId", referencedColumnName="friendBId")
private User friendB;
}
這似乎是工作,但在我的數據庫生成數據庫表由每個ID兩次 - 我想一個是主鍵,另一個是外鍵。
我該如何使這個PK獨一無二 - 如果有一個B的A到B,A到B的友誼將被拒絕?
另一個問題是關於設計 - 這是實現我想實現的一個好方法嗎?我的意思是使用複合密鑰,而不是簡單地將自己的pk用於友誼。