【问题标题】:Hibernate: Mapping with one-to-many on non-primary-key columnsHibernate:在非主键列上进行一对多映射
【发布时间】:2013-11-07 00:33:56
【问题描述】:

我陷入了休眠 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 的表之间建立了关系,它可以工作,但是对于这个“漂亮”的表“Others”,我被卡住了。

如果有人能在这件事上帮助我,我会很高兴。提前谢谢。

【问题讨论】:

  • 你能分享你的Others实体类吗?

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


【解决方案1】:

试试这样。我试过了,它对我有用。

<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> 

【讨论】:

    【解决方案2】:

    Item id 应该定义为 Others.hbm.xml 中的属性:

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

    【讨论】:

    • 我尝试了您的建议,但我收到了相同的错误消息...尽管如此:在我的类 ItemProperties 中,它与 property-ref="itemId" 一起使用...
    • 看起来是因为你需要告诉hibernate itemId 属性。我已经更正了我的答案,你能检查一下吗?
    • 我猜你是对的。它似乎工作。在这一点上我不明白hibernate。我昨天用另一个休眠类尝试了这个,我得到了一个“重复映射”错误。但在这种情况下,它的工作...... aaaaaah
    • 在另一个关系中,我尝试实现您的想法,但出现“实体映射中的重复列:xxx”错误。为什么???
    • 如错误提示,同一个属性xxx有多个定义
    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多