【发布时间】:2014-01-27 21:51:14
【问题描述】:
如何使用 Hibernate 创建一个实体表,它将其中的外键作为主键。将其视为两个具有多对多关系的表之间的连接表(具有很少的其他属性)。
有示例代码吗?
【问题讨论】:
如何使用 Hibernate 创建一个实体表,它将其中的外键作为主键。将其视为两个具有多对多关系的表之间的连接表(具有很少的其他属性)。
有示例代码吗?
【问题讨论】:
有什么不使用 PK 的真正理由吗?如果实体有其他属性,我会说你最好有一个。
如果你真的不想要一个,你可以使用 JPA 的 @EmbeddedId 使用复合键
private UserSessionId id
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "userId", column = @Column(name = "user_id", nullable = false)),
@AttributeOverride(name = "sessionId", column = @Column(name = "session_id", nullable = false)) })
public UserSessionId getId() {
return this.id;
}
public void setId(UserSessionId id) {
this.id = id;
}
然后你可以定义一个单独的实体 UserSessionId 包含两个 FK,至少这是 Hibernate Tools 生成复合键关系的方式
【讨论】:
如果连接中不涉及额外字段(即仅外键)。您可以使用以下技术,不需要 java 域对象,hibernate 会为您解决所有问题。
http://www.mkyong.com/hibernate/hibernate-many-to-many-relationship-example-annotation/
您的表中仍然可以有其他列,例如 creation_date,但它们的值需要在数据库级别更新。
【讨论】:
JSR 文档中有非常好的组合 PK 示例,请查看链接中的 JSR 317persistence-2_0-final-spec.pdf,2.4 Primary Keys and Entity Identity 部分有很好的示例。
【讨论】: