2013-10-28 59 views
4

我被困在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 

外鍵約束被配置爲通過使用列「項目ID」,以這兩個表連接。

我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和名爲ItemsProp erties和它的作品,但與這個「漂亮」表「其他」我卡住了。

我很高興,如果有人能幫助我解決這個問題。 Thx提前。

+0

你能分享你的'Others'實體類嗎? –

回答

0

項目ID應該被定義爲Others.hbm.xml屬性:

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

我試過了你的建議,但是我得到了同樣的錯誤信息......儘管如此:在我的ItemProperties類中,它與property-ref =「itemId」一起工作... – user1737686

+0

看起來像是因爲你需要告訴hibernate關於itemId屬性。我糾正了我的答案,你能檢查嗎? – aquaraga

+0

我想你是對的。它似乎工作。我不明白冬眠在這一點上。我昨天嘗試了另一個hibernate類,並得到了「重複映射」錯誤。但在這種情況下,它的工作.... aaaaaah – user1737686

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>