用复合主键映射Hibernate中的集合



由于与DB复制有关的原因,我需要我的DB中的所有表都有主键。

我的应用程序中的一些实体定义如下:

<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月)这本书。第六章,第244页

"一个集合不能包含重复的元素,所以ITEM_IMAGE集合表是表中两个列的组合声明:ITEM_ID和FILENAME。"

问题是,这种映射集合的方式实际上创建了一个没有主键的集合表。(只有父实体表的外键)

是否有一种方法可以使用键-元素集映射和强制hibernate来创建具有两列的复合主键的集合表?(我对将set映射更改为键/多对多不感兴趣,这将创建另一个子实体表)有人能解释这种行为吗?

谢谢!

相关问题

根据Hibernate 4.2文档20.6.1:

如果您希望SchemaExport实际创建的主键,您必须将所有列声明为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文档关于辅助数据库对象)。

最新更新