【问题标题】:"Repeated column in mapping for entity" where each column is only mapped once“实体映射中的重复列”,其中每列仅映射一次
【发布时间】:2013-11-07 02:18:13
【问题描述】:

我有一个休眠映射文件 ParcelServicePresetIds.hbm.xml:

<hibernate-mapping>
<class name="de.delife.sql.ParcelServicePresetIds" table="ParcelServicePresetIDs" schema="dbo" catalog="xxx">
    <id name="id" type="int">
        <column name="ID" />
        <generator class="assigned" />
    </id>
    <many-to-one name="itemsBase" class="de.sql.ItemsBase" fetch="select" property-ref="itemId">
        <column name="ItemID" />
    </many-to-one>
    <property name="itemId" column="ItemID" type="java.lang.Integer"/>
    <property name="intValue" type="java.lang.Integer">
        <column name="intValue" />
    </property>
</class>
</hibernate-mapping>

当我运行我的程序时,我得到一个错误:

Initial SessionFactory creation failed.org.hibernate.MappingException: Repeated column in mapping for entity: de.sql.ParcelServicePresetIds column: ItemID (should be mapped with insert="false" update="false")

为什么?

我还有另一个实体Others.hbm.xml:

<many-to-one name="itemsBase" class="de.sql.ItemsBase" fetch="select" property-ref="itemId">
    <column name="ItemID" unique="true" />
</many-to-one>
<property name="itemId" column="ItemID" type="java.lang.Integer"/>

在这个实体中它正在工作!!!我不明白! 有人能解释一下区别吗?

【问题讨论】:

    标签: java sql-server hibernate hibernate-mapping


    【解决方案1】:

    您将两次声明 ItemID 列:一次使用 &lt;property /&gt;,第二次使用 &lt;many-to-one /&gt; 标签。
    删除一个(可能是&lt;property/&gt; 声明)

    【讨论】:

    • 我开始时没有将 ItemID 定义为单独的属性,并且我遇到了另一个失败(没有属性...)。所以我插入了属性声明...
    【解决方案2】:

    您可能不需要在这里使用 propertyRef。它可能只是:

    <many-to-one name="itemsBase" class="de.sql.ItemsBase" fetch="select" column="ItemID"/>
    

    另外,您不需要itemId 的属性声明。

    回答问题的第二部分:

    • 每当您提供 propertyRef 时,您都需要使用属性定义来跟进它。
    • 如果它是“托管列”,例如外键引用;您应该使用insert="false" update="false" 来限定属性定义
    • 但是,在大多数情况下;您不需要 propertyRef。您可以在多对一部分中使用简单的列定义。

    【讨论】:

    • 我已经回答了后续问题
    • 在 Other.hbm.xml 我需要属性声明,但在 ParcelServicePresetIds.hbm.xml 我不需要它...有人可以解释一下区别吗?
    • @user1737686 没提!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2012-08-13
    • 2012-09-07
    相关资源
    最近更新 更多