2013-10-28 58 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>