Hibernate cascade = save-update,更新新子实体的所有兄弟

时间:2016-11-23 18:19:16

标签: java sql hibernate parent-child many-to-one

我有一个hibernate的父子配置,如下所示

<class name="A" table="TAB_A">
  <... columns defined here ...>
  <map name="lookup" inverse="true" cascade="all-delete-orphan" lazy="false" fetch="join" access="field" >
     <key column="A_FK" />
     <map-key type="string" column="key_name" />
     <one-to-many class="B" />
 </class>

 <class name="B" table="TAB_B>
    <... columns defined here ...>
    <many-to-one name="a" class="A" column="A_FK" not-null="true" cascade="save-update" />
    <property name="key" column="key_name" type="string" not-null="true" />
 </class>

最近我们将hibernate从2.x升级到4.x。

此次迁移后我们遇到的问题是表B中的新插入会插入新记录并更新TAB_B的所有现有记录。

update语句更新TAB_B的“key_name”列。

我尝试查看Hibernate的源代码,发现AbstractCollectionPersister.insertRows方法现在已在OneToManyPersister.insertRows中被覆盖。这个重写的方法调用另一个调用update语句的方法writeIndex

这是预期的行为吗?如果不是为什么子条目会更新? 我们错过了什么吗?

  • Hanumant

0 个答案:

没有答案