0

休止状態のマッピング ファイル 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"/>

このエンティティでは機能しています!!! 私はこれを理解できません!誰かが違いを説明できますか?

4

2 に答える 2

0

列を 2 回宣言しItemIDています。1 回目はタグで<property />、2 回目は<many-to-one />タグで宣言しています。
1つを削除します(おそらく<property/>宣言)

于 2013-10-28T10:45:44.367 に答える
0

ここで propertyRef を使用する必要はないでしょう。単純に次のようになります。

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

また、 のプロパティ宣言は必要ありませんitemId

質問の2番目の部分に答えるには:

  • propertyRef を指定するたびに、プロパティ定義でフォローアップする必要があります。
  • それが「管理された列」、つまり外部キー参照の場合。プロパティ定義を修飾する必要があります insert="false" update="false"
  • ただし、ほとんどの場合。propertyRef は必要ありません。多対一セクションで単純な列定義を行うことができます。
于 2013-10-28T10:47:00.133 に答える