我想在用户模型之间创建一种“友谊”关系。每个友谊我还需要一个额外的专栏。我知道我需要使用复合主键的连接类。那是我的用户类
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用于友谊。
答案 0 :(得分:0)
我想在友谊实体中你添加了两次用户实体(非常好),但为什么
private Integer friendAId;
private Integer friendBId;
又来了吗?这可能是ID生成两次的原因。