关于我以前的帖子 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的首发,所以不确定我在映射中出错的地方,因为更改为映射文件导致第二个功能停止工作。
这方面的任何帮助都会有所帮助。
答案 0 :(得分:1)
您是如何尝试将孩子与给定的父母联系起来的?
由于您的parentId
属性为update="false" insert="false"
,因此在更新方面完全忽略该属性(当update / insert为false时,它将用作readonly属性)。
看起来您将父级映射为A
,因此为了在子级上设置父级,您只需要调用child.setA(parent);
,然后保存该子级。
答案 1 :(得分:0)
这是我身边的一些愚蠢的错误,或者老实说缺乏调试。能够解决问题,因为基于我获取父母的id是错误的,因此发送了null。
感谢 Sean 提供有价值的投入。