【发布时间】:2016-02-20 12:02:03
【问题描述】:
我有一个父/子一对多的单向关系。 父 POJO 和子 POJO 都使用通过 @SQLInsert 注释指定的自定义 Insert-on-duplicate-update 插入查询。
通过级联插入父/子对 - 一切正常,实体管理器已关闭。 然后我创建一个新的实体管理器并尝试插入相同的父/子对,但具有更新的值(相同的主键,但其他一些字段已更改)。
父级的 Insert-on-duplicate-update 工作得很好,并且值已更新。 然而,在子表中,我们最终得到了 2 个条目,一个具有旧值和 NULL parent_id 外键,另一个具有新值并正确设置了 FK。
我查看了 Hibernate 生成的查询,发现如下:
- 插入子行,外键设置为 NULL
- 然后运行更新查询,为给定的子 ID 设置 parent_id
- 运行另一个更新,将 parent_id 设置为 NULL,我假设第一行的子 ID
- 运行设置 parent_id 的第三个更新查询
有没有办法级联插入插入子行并在同一个查询中设置FK,从而无需运行单独的更新查询?
【问题讨论】: