2011-05-17 80 views
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用於友誼。

回答

0

我想在友誼實體您添加用戶實體的兩倍(很細),但爲什麼

private Integer friendAId; 
private Integer friendBId; 

又在那裏?這可能是ID生成兩次的原因。