我有一个映射对象,该对象具有另一个映射对象的集合。 每当包含的集合中的对象是数据库的新对象时,我都会发生插入行为并随之进行更新。
我的问题是:
- What is the purpose of this secondary update?
- How can I listen to it?
添加PreUpdateEventListener无效。
我想要做的是消除此次更新到相同的值,并仅通过单次插入来完成它。
我在这里找到了这样一个问题:https://forum.hibernate.org/viewtopic.php?f=1&t=1011641 但没有答案。
我还发现有一个标记“ update”,这似乎有用,但这是描述行为的原因吗?
映射:
<class>
...
<map name="attributes" table="DEF"
cascade="all-delete-orphan" lazy="false" batch-size="5">
<key not-null="true">
<column name="PID"/>
<column name="CDATE"/>
</key>
<map-key column="NAME" type="string" alias="name"/>
<one-to-many entity-name="DocumentAttributes"/>
</map>
...
<class>
<class name="com.moc.Attribute"
entity-name="DocumentAttributes" table="DEF"
dynamic-update="true"
dynamic-insert="true">..</class>
休眠日志:
Hibernate: insert into BDOC (ID, CDATE) values (?, ?)
// Why this insertion consists all columns despite being dynamic?
Hibernate: insert into DEF (TYPE, VALUE, IS_CHANGED, PID, CDATE, NAME, id) values (?, ?, ?, ?, ?, ?, ?)
//Why this update happen??
Hibernate: update DEF set PID=?, CDATE=?, NAME=? where id=?