Self ManyToMany使用JPA 2.0添加其他列

时间:2011-05-17 19:33:48

标签: java hibernate jpa

我想在用户模型之间创建一种“友谊”关系。每个友谊我还需要一个额外的专栏。我知道我需要使用复合主键的连接类。那是我的用户类

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独一无二 - 如果A到B之间的友谊将会被拒绝?

另一个问题是关于设计 - 这是实现我想要实现的目标的好方法吗?我的意思是使用复合键而不是简单地拥有pk用于友谊。

1 个答案:

答案 0 :(得分:0)

我想在友谊实体中你添加了两次用户实体(非常好),但为什么

private Integer friendAId;
private Integer friendBId;

又来了吗?这可能是ID生成两次的原因。