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

Hibernate中映射多对一关系的问题,hibernate,Hibernate,关于我以前的职位 我有一个父表a和它的子表B。a和B的关系是一对多,而B和a的关系是多对一 我需要根据表B的父id从表B中获取数据,我尝试使用命名查询,这里是子表的更新hbm文件 <hibernate-mapping> <class name="ChildClass" table="B"> <id name="uuid" type="java.lang.String"> <

关于我以前的职位

我有一个父表a和它的子表B。a和B的关系是一对多,而B和a的关系是多对一 我需要根据表B的父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>

来自Child,其中Child.parentid=:parentid
我能够做到这一点,但遇到了一个大问题。有时我想根据parentid更新子表,所以我只是根据parentid获取父对象,并在子实体中使用其引用,试图保存子实例,所有内容都已正确保存,但parentid被设置为“null” 我认为
null
被设置为只读,因为我已经将parentid设置为只读

我只是Hibernate的初学者,所以不确定我在映射中到底哪里做错了,因为更改为映射文件会导致第二个功能停止工作


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

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

由于您的
parentId
属性是
update=“false”insert=“false”
,因此在更新时该属性将被完全忽略(当update/insert为false时,它将用作只读属性)


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

这是我犯的愚蠢错误,或者说确实缺少调试。我能够解决问题,因为我获取父项所依据的id是错误的,因此发送null


谢谢肖恩的宝贵意见。

@Sena:是的,我同意你说的是真的,我正在使用child.setA(父母)来维护孩子与父母的关系;我只为NamedQueryId添加了另一个带有destinationid的属性,这似乎无关紧要,但可以尝试将
属性直接添加到
多对一
元素中,不使用子列:我无法获得您在第二条评论中所说的内容。请您详细说明一下。现在您有一个具有子节点的列,但您可以直接在via上指定该列:
。。。您应该尝试提供一些Java代码来说明您正在做什么,这样我们就可以看到其他地方是否存在问题。