2011-03-24 98 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