我有两个实体,它们通过springdataJPA中的@OneToMany双向关系以父子方式相关。
底层表是通过外部feed填充的,有时候我们会在收到父表之前收到子表。主键/外键是从传入的feed中使用的,所以我们提前知道它们是什么(尽管我们没有对db强制执行fk约束)。数据最终会保持一致。
是否有办法插入一个引用父键的子实体,即使父键还不存在。
我们使用的是最新版本的Spring data jpa,并将hib作为我们的提供者。
我有两个实体,它们通过springdataJPA中的@OneToMany双向关系以父子方式相关。
底层表是通过外部feed填充的,有时候我们会在收到父表之前收到子表。主键/外键是从传入的feed中使用的,所以我们提前知道它们是什么(尽管我们没有对db强制执行fk约束)。数据最终会保持一致。
是否有办法插入一个引用父键的子实体,即使父键还不存在。
我们使用的是最新版本的Spring data jpa,并将hib作为我们的提供者。
2条答案
按热度按时间weylhg0b1#
是否有办法插入一个引用父键的子实体,即使父键还不存在。
一种方法是将native SQL query添加到
ChildEntityRepository
中,类似于(.persistWhenParentNotAvailable()
)。当您知道在这个中的指定点无法使用父数据时,可以使用这个方法来保存数据。
我认为您还可以尝试手动为子对象给予一个仅设置ID字段的父对象,并确保
NOT
为该child->parent
关系配置了级联。pgvzfuti2#
一个选项是单向@OneToMany。这将迫使JPA使用JOIN表来管理父表和子表之间的关系,而不是子表中的FK。这显然会有开销,但如果性能不是关键,那么它可能是可行的。
这将允许您保留不包含任何父级的子级,并在以后添加父级。