Hibernate中映射多对一关系的问题
关于我以前的职位 我有一个父表a和它的子表B。a和B的关系是一对多,而B和a的关系是多对一 我需要根据表B的父id从表B中获取数据,我尝试使用命名查询,这里是子表的更新hbm文件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"> <
<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代码来说明您正在做什么,这样我们就可以看到其他地方是否存在问题。