2011-03-24 161 views
0

映射多到一的關係對於我以前的帖子 Previous Post問題在休眠

我有一個父表A和A到B的其子表B.關係是一個一對多的地方從B到A的是多對一的 我需要從表B的數據中獲取基於它的父id的數據,並且爲此我試圖使用命名查詢,這裏是子表的更新後的hbm文件。

<hibernate-mapping> 
    <class 
     name="ChildClass" 
     table="B"> 
     <id name="uuid" type="java.lang.String"> 
      <column name="UUID" /> 
      <generator class="uuid" /> 
     </id> 
     <!-- <version name="version" column="OBJ_VERSION" /> --> 
     <many-to-one name="A" 
      class="ParentClass" fetch="join"> 
      <column name="PARENTID" /> 
     </many-to-one> 
     <property name="parentid" type="java.lang.String" update="false"   insert="false"> 
      <column name="PARENTID" /> 
     </property> 
    </class> 
</hibernate-mapping> 

開始的想法添加

<property name="parentid" type="java.lang.String" update="false" insert="false"> 
<column name="PARENTID" /> 
       </property> 

是利用基於parentid.Something這樣

<hibernate-mapping> 
    <query name="getChildRecordsByParentID"> 
     from Child child where child.parentid = :parentid  
</query> 
</hibernate-mapping> 

休眠命名查詢和我能夠做到這一點,但在打一個主要的問題。有時我想更新基於parentid的子表,所以我只是基於parentid獲取父對象,並在子實體中使用其引用,並試圖保存子實例,一切都得到妥善保存,除了正在被設置的parentid爲"null" 我認爲null只讀

被設置爲我所做的parentId的我只是在Hibernate中首發所以不知道確切位置我在做映射時出錯,因爲更改映射文件導致第二個功能停止工作。

在這方面的任何幫助將大有裨益。

回答

0

這是我身邊的一些愚蠢的錯誤,或者誠實地缺乏調試。能夠解決這個問題,因爲我提取父母的id是錯誤的,因此發送了null。

謝謝肖恩爲寶貴的投入。

1

你如何將孩子與給定的父母聯繫起來?

由於您的parentId屬性爲update="false" insert="false",該屬性在更新方面完全被忽略(當update/insert爲false時,它被用作readonly屬性)。

看起來像你將父母映射爲A,所以爲了設置孩子的父母,你只需要撥打child.setA(parent);並保存孩子。

+0

@Sena:是的,你同意你說的是真的我正在使用child.setA(parent)來維護孩子與父母的關係。我只添加了其他屬性與destinationid爲namedquery – 2011-03-24 05:02:49

+0

它似乎並不重要,但也許嘗試直接將'column'屬性添加到'many-to-one'元素,而不是使用子列: 2011-03-24 05:26:43

+0

我無法得到您在第二條評論中所說的內容,請您詳細說明一下 – 2011-03-24 05:35:31