How to force Hibernate to remove orphans before update

微笑、不失礼 提交于 2019-11-28 12:41:35

There are so many things that are wrong in this example:

  1. EAGER fetching on the @OneToManycollection is almost always a bad idea.
  2. Unidirectional collections are also bad, use the bidirectional one.
  3. If you get this exception, most likely you cleared all the elements and re-added back the ones that you want to be retained.

The best way to fix it is to explicitly merge the existing set of children with the incoming ones so that:

  1. New child entities are being added to the collection.
  2. The child entities that are no longer needed are removed.
  3. The child entities matching the business key (annotation_group_name, study_id) are updated with the incoming data.

For more details, check out High-Performance Java Persistence.

According to Hibernate documentation hibernate perform in the following order to preserve foreign-key constraint:

  1. Inserts, in the order they were performed
  2. Updates
  3. Deletion of collection elements
  4. Insertion of collection elements
  5. Deletes, in the order they were performed

For your special need you should manually flush the transaction to force the deletion in database before.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!