2013-10-28 2 views
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"/> 

В этой организации он работает !!! Я не понимаю! Может кто-нибудь объяснить разницу?

ответ

0

Вы объявляете ItemID столбцы дважды: один раз с <property /> и второй раз с <many-to-one /> тегом.
Удалить (возможно, <property/>)

+0

Я начал без определения ItemID как отдельного объекта, и я получил еще один сбой (без свойства ...). Поэтому я вставил заявление свойства ... – user1737686

0

Вам, вероятно, не нужно использовать свойствоRef здесь. Это может быть просто:

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

Кроме того, вам не требуется объявление свойства для itemId.

Чтобы ответить на вторую часть вопроса:

  • Всякий раз, когда вы даете propertyRef, вы должны следовать за ним с определением свойства.
  • Если это «управляемый столбец», то есть ссылка на внешний ключ, например; вы должны квалифицировать определение свойства с помощью insert="false" update="false"
  • Однако в большинстве случаев; вам не нужен propertyRef. Вы можете сделать с простым определением столбца в разделе «много-к-одному».
+0

Это работает. Спасибо. Но почему? См. Мое редактирование вопроса. – user1737686

+0

Я ответил на следующий вопрос – aquaraga

+0

В Other.hbm.xml Мне нужно объявление свойства, но в ParcelServicePresetIds.hbm.xml мне это не нужно ... Может кто-то объяснить разницу? – user1737686

Смежные вопросы