我有一个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
。
这是预期的行为吗?如果不是为什么子条目会更新? 我们错过了什么吗?