[英]Mapping a set in Hibernate with a composite primary key
由于与数据库复制相关的原因,我需要数据库中的所有表都具有主键。
我的应用程序中的某些实体定义如下:
<class name="Item" table="ITEM">
<id name="id" column="ITEM_ID"/>
<property name="name" column="NAME" />
<set name="images" table="ITEM_IMAGE">
<key column="ITEM_ID"/>
<element type="string" column="FILENAME" not-null="true"/>
</set>
</class>
根据《 Java Persistence with Hibernate》(2006年11月)一书的介绍。 第6章,第244页
“集合不能包含重复的元素,因此ITEM_IMAGE集合表的主键是声明中两个列的组合:ITEM_ID和FILENAME。”
问题在于,这种映射集合的方式实际上会创建没有主键的收集表。 (仅是父实体表的外键)
有没有一种方法可以使用键元素集映射并强制休眠以使用两列的复合主键创建集合表? (我对将集合映射更改为key / many-to-many并不感兴趣,这将创建另一个子实体表)有人可以解释这种行为吗?
谢谢!
如果希望SchemaExport实际创建<set>的主键,则必须将所有列声明为not-null =“ true”。
因此,在您的示例中,您只缺少key
元素上的not-null
:
<class name="Item" table="ITEM">
<id name="id" column="ITEM_ID"/>
<property name="name" column="NAME" />
<set name="images" table="ITEM_IMAGE">
<key column="ITEM_ID" not-null="true"/>
<element type="string" column="FILENAME" not-null="true"/>
</set>
</class>
如果不可能将所有列都定义为非空,则可以通过<database-object>
元素向表中显式添加索引(请参见有关辅助数据库对象的 Hibernate文档)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.