spring-data-jpa 有没有办法在没有父JPA实体的情况下保存子JPA实体?

gv8xihay  于 2022-11-10  发布在  Spring
关注(0)|答案(2)|浏览(185)

我有两个实体,它们通过springdataJPA中的@OneToMany双向关系以父子方式相关。
底层表是通过外部feed填充的,有时候我们会在收到父表之前收到子表。主键/外键是从传入的feed中使用的,所以我们提前知道它们是什么(尽管我们没有对db强制执行fk约束)。数据最终会保持一致。
是否有办法插入一个引用父键的子实体,即使父键还不存在。
我们使用的是最新版本的Spring data jpa,并将hib作为我们的提供者。

weylhg0b

weylhg0b1#

是否有办法插入一个引用父键的子实体,即使父键还不存在。
一种方法是将native SQL query添加到ChildEntityRepository中,类似于(.persistWhenParentNotAvailable())。
当您知道在这个中的指定点无法使用父数据时,可以使用这个方法来保存数据。
我认为您还可以尝试手动为子对象给予一个仅设置ID字段的父对象,并确保NOT为该child->parent关系配置了级联。

pgvzfuti

pgvzfuti2#

一个选项是单向@OneToMany。这将迫使JPA使用JOIN表来管理父表和子表之间的关系,而不是子表中的FK。这显然会有开销,但如果性能不是关键,那么它可能是可行的。
这将允许您保留不包含任何父级的子级,并在以后添加父级。

Child child = new Child(1);
entityManager.persist(child);

::

Parent parent = new Parent(1);
parent.addChild(child);
entityManager.persist(parent);

相关问题