如何在复合键中使用生成的值?
我有两个类documentlog和documentversion(主键:int doc_id和int docVersionID),具有多对一关系。 我使用了一个名为CompundKey的复合键类来管理复合主键。 我需要自动增加docversionID,但我无法做到这一点。 在这方面你能帮我吗?
@Entity @Table(name = "Documentversion", schema = "DocumentManagement") public class DocumentVersion implements Serializable { private CompoundKey id; private List documentLog; @OneToMany(mappedBy="documentVersion", targetEntity=DocumentLog.class, cascade ={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) public List getDocumentLog() { return documentLog; } public void setDocumentLog(List documentLog) { this.documentLog = documentLog; } @EmbeddedId @AttributeOverride(name="doc_Id", column=@Column(name="doc_Id") ) public CompoundKey getId() { return id; } public void setId(CompoundKey id) { this.id = id; } }
文档在这个主题上有点混乱……
据我所知,复合键总是必须由应用程序(即非生成) 分配 ,至少使用标准JPA,还有Hibernate Core:
8.4。 组件作为复合标识符
…
您不能使用IdentifierGenerator生成复合键。 相反,应用程序必须分配自己的标识符。
但实际情况可能略有不同(请参阅HHH-2060和/或此线程以获取使用CompositeUserType和IdentifierGenerator的替代方案)。
现在,最令人困惑的部分,来自Hibernate Annotations 3.5文档:
2.2.3.2.4。 部分标识符生成
Hibernate支持自动生成一些标识符属性。 只需在一个或多个id属性上使用
@GeneratedValue
注释即可。…
您还可以在
@EmbeddedId
类中生成属性。
(另请阅读Hibernate团队针对使用此function的警告)。
虽然我没有任何实际经验。
参考
- Hibernate核心参考指南
- 8.4。 组件作为复合标识符
- Hibernate Annotations 3.5参考指南
- 2.2.3.2.4。 部分标识符生成
可以为@EmbeddedId声明自己的生成器以使用序列进行Id生成。
此外,您需要声明假实体以自动创建序列。