我有一个带有 JPA 连接实体的复杂对象图。当我删除父级时,删除会正确地传递给子级。
然后我检测父类(为了不急切地加载一对一的关系)并且在删除时我得到引用完整性违规异常。查看刷新时的查询休眠问题,我可以看到休眠确实尝试以错误的顺序删除记录,因此数据库抱怨引用完整性并引发异常。
为什么这仅在实体被检测时才会出现?有没有办法改变删除级联顺序?
我有一个带有 JPA 连接实体的复杂对象图。当我删除父级时,删除会正确地传递给子级。
然后我检测父类(为了不急切地加载一对一的关系)并且在删除时我得到引用完整性违规异常。查看刷新时的查询休眠问题,我可以看到休眠确实尝试以错误的顺序删除记录,因此数据库抱怨引用完整性并引发异常。
为什么这仅在实体被检测时才会出现?有没有办法改变删除级联顺序?
我没有你的问题的答案,但是......你为什么要搞乱“仪器”来让你的一对一关联延迟加载?Foo
我已经测试了以下内容以了解类与其之间的一对一关联FooDetail
:
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
public FooDetail getFooDetail() {
return detail;
}
懒加载就行了。Foo
这是检索实例时执行的语句:
休眠:从 Foo foo0_ 中选择 foo0_.id 作为 id45_0_,foo0_.detail_id 作为 detail3_45_0_,foo0_.shortName 作为 shortName45_0_ where foo0_.id=?
而且,稍后,当调用 getter 时,FooDetail
会获取 :
休眠:选择 foodetail0_.id 作为 id46_0_,foodetail0_.fullName 作为 fullName46_0_ from FooDetail foodetail0_ where foodetail0_.id=?
并且删除给定的Foo
实例也可以正常工作,语句以正确的顺序执行:
休眠:从 Foo 中删除,其中 id=? 休眠:从 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 测试。
更新:如果这不是您要查找的内容,请使用一对多关联,一对一关联存在限制(请澄清您的问题,读者无法猜出您不知道的内容)写)。