gpt4 book ai didi

hibernate 、检测和删除级联顺序

转载 作者:行者123 更新时间:2023-12-02 04:17:13 24 4
gpt4 key购买 nike

我有一个带有 JPA 连接实体的复杂对象图。当我删除父级时,删除会正确地传递给子级。

然后我检测父类(为了不急切地加载一对一的关系)并且在删除时我得到引用完整性违规异常。查看刷新时的查询 hibernate 问题,我可以看到 hibernate 确实尝试以错误的顺序删除记录,因此数据库提示引用完整性并引发异常。

为什么这仅在实体被检测时才会出现?有没有办法改变删除级联顺序?

最佳答案

我没有你的问题的答案,但是......你为什么要搞乱“仪器”来让你的一对一关联延迟加载?我已经测试了以下类 Foo 之间的一对一关联及其FooDetail :

@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
public FooDetail getFooDetail() {
return detail;
}

和延迟加载 正常工作 .这是检索 Foo 时执行的语句实例:

hibernate :从 Foo foo0_ 中选择 foo0_.id 作为 id45_0_,foo0_.detail_id 作为 detail3_45_0_,foo0_.shortName 作为 shortName45_0_ where foo0_.id=?

然后,当调用 getter 时, FooDetail被提取:

hibernate :选择 foodetail0_.id 作为 id46_0_,foodetail0_.fullName 作为 fullName46_0_ from FooDetail foodetail0_ where foodetail0_.id=?

并删除给定的 Foo实例也 作品 很好,语句以正确的顺序执行:

hibernate :从 Foo 中删除,其中 id=?
hibernate :从 FooDetail 中删除 id=?

下面,Hibernate生成的DDL供对应表引用:

创建表 Foo (id bigint not null, shortName varchar(255), detail_id bigint, 主键 (id))
创建表 FooDetail (id bigint not null, fullName varchar(255), 主键 (id))
更改表 Foo 添加约束 FK212C3F68B31178 外键 (detail_id) 引用 FooDetail

使用 Hibernate Annotations 3.4.0.GA 测试。

更新:如果这不是您要查找的内容,请使用一对多关联,一对一关联存在限制(请澄清您的问题,读者无法猜测您没有写什么)。

关于 hibernate 、检测和删除级联顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2333286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com