我的问题是我的应用程序“工作”,虽然它不应该(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)
1条答案
按热度按时间mkshixfv1#
根据JPA规范的第3.2.4节,这是正确的行为,包括在与数据库同步期间发现更改:
如果X是托管实体,则它将与数据库同步。
cascade=PERSIST或cascade=ALL,则持久操作将应用于Y。