在Hibernate中映射多对一关系的问题

时间:2011-03-24 03:24:43

标签: hibernate

关于我以前的帖子 Previous Post

我有一个父表A及其子表B.从A到B的关系是一对多的,其中B到A的关系是多对一的 我需要根据其父ID从表B中获取数据,我试图在这里使用命名查询是子表的更新的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的hibernate命名查询。像这样的东西

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

并且我能够实现这一点,但遇到了一个重大问题。有时我想基于parentid更新子表,所以我只是根据parentid获取父对象并在子实体中使用它的引用我试图保存子实例,除了被设置为"null"的parentid之外,所有内容都被正确保存 我认为null正在设定,因为我将parentid视为只读

我只是Hibernate的首发,所以不确定我在映射中出错的地方,因为更改为映射文件导致第二个功能停止工作。

这方面的任何帮助都会有所帮助。

2 个答案:

答案 0 :(得分:1)

您是如何尝试将孩子与给定的父母联系起来的?

由于您的parentId属性为update="false" insert="false",因此在更新方面完全忽略该属性(当update / insert为false时,它将用作readonly属性)。

看起来您将父级映射为A,因此为了在子级上设置父级,您只需要调用child.setA(parent);,然后保存该子级。

答案 1 :(得分:0)

这是我身边的一些愚蠢的错误,或者老实说缺乏调试。能够解决问题,因为基于我获取父母的id是错误的,因此发送了null。

感谢 Sean 提供有价值的投入。