JPA CascadeType.PERSIST触发器即使在父级未持久化时也会持久化

smdnsysy  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(132)

我的问题是我的应用程序“工作”,虽然它不应该(AFAIK)
每个教程都说CascadeType.PERSIST会在持久化父进程时自动持久化子进程,并且通常会在后面给出一个带有显式em.persist(parent)的示例
我的代码看起来像这样(简化):

@Entity
class Parent(
    @OneToMany(cascade = [CascadeType.PERSIST])
    val children: List<Child>
)

fun addChild() {
    val parent = parentRepository.find(id)
    val child = new Child()
    parent.children.add(child)
    // childRepository.save(child) is missing here but surprisingly the child is persisted
}

看起来CascadeType.PERSIST是在父集合被修改时触发的,对吗?(我用的是Hibernate 5.6.8,Spring 5.3.19和Spring Data 2.6.4)

mkshixfv

mkshixfv1#

根据JPA规范的第3.2.4节,这是正确的行为,包括在与数据库同步期间发现更改:
如果X是托管实体,则它将与数据库同步。

  • 对于来自X的关系所引用的所有实体Y,如果与Y的关系已使用级联元素值进行注解

cascade=PERSIST或cascade=ALL,则持久操作将应用于Y。

相关问题