У меня есть сопоставленный объект, у которого есть коллекция других сопоставленных объектов.
Всякий раз, когда объект в содержащейся коллекции является новым для БД, у меня есть поведение вставки с последующим обновлением.
Мои вопросы:
- 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
но ответа нет.
Кроме того, я обнаружил, что есть флаг «обновление», кажется, делает свое дело, но является ли это причиной описанного поведения?
Отображение:
<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=?
Кто-нибудь здесь может описать такое поведение?