Hibernate:在非主键列上使用一对多映射

时间:2013-10-28 09:40:28

标签: java sql-server xml hibernate hibernate-mapping

我坚持使用hibernate xml映射配置。

我在MSSQL数据库中建立了一些带有外键约束的表:

Table ItemsBase 
ID       int   primary-key
ItemID   int   unique index
... some more columns

Table Others
ID       int   primary-key
ItemID   int   unique index
... some more columns

外键约束配置为使用“ItemID”列连接这两个表。

我的ItemsBase.hbm.xml文件如下所示:

<hibernate-mapping>
    <class name="de.delife.sql.ItemsBase" table="ItemsBase" schema="dbo" catalog="Delife_Plenty">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="assigned" />
        </id> 
        <property name="itemId" type="java.lang.Integer">
            <column name="ItemID" unique="true" />
        </property>
        <set name="otherses" table="Others" inverse="true" lazy="true" fetch="select">
            <key property-ref="itemId">
                <column name="ItemID" />
            </key>
            <one-to-many class="de.delife.sql.Others" not-found="ignore" />
        </set>
    </class>
</hibernate-mapping>

和Others.hbm.xml文件如下所示:

<hibernate-mapping>
    <class name="de.delife.sql.Others" table="Others" schema="dbo" catalog="Delife_Plenty">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="assigned" />
        </id>
        <many-to-one name="itemsBase" class="de.delife.sql.ItemsBase" fetch="select" property-ref="itemId">
            <column name="ItemID" unique="true" />
        </many-to-one>
    </class>
</hibernate-mapping>

对我来说一切都很好,但是当我运行程序时,我遇到了一个休眠错误:

property [itemId] not found on entity [de.delife.sql.Others]

我在ItemsBase和一个名为ItemsProperties的表之间建立了一个关系并且它有效,但是这个“漂亮”的表“其他”我被卡住了。

如果有人可以帮我解决这个问题,我会很高兴的。 Thx提前。

2 个答案:

答案 0 :(得分:2)

试试这样。我试过并为我工作。

<set name="otherses" table="Others"  inverse="true" lazy="true" fetch="select">
    <key column="itemId" foreign-key="itemId" property-ref="itemId"/>
    <one-to-many class="de.delife.sql.Others" not-found="ignore" />
</set> 

答案 1 :(得分:0)

项目ID应定义为Others.hbm.xml中的属性:

<property name="itemId" column="ItemId"/>