我正在尝试使用 hibernate (6.4.1.Final)
@SoftDelete
注释实现软删除功能,并且我在给定引用的软删除实体上遇到 @ManyToOne(fetch = FetchType.LAZY)
问题。
说明:
To-one attribute (com.example.EntityA.referencedEntityB) cannot be mapped as LAZY as its associated entity is defined with @SoftDelete
我的问题是:如果引用的实体是软删除的,为什么不能延迟加载?
我尝试在 hibernate issues tracker 中搜索答案,但没有成功。
我能够在那个问题中找到原因。
customer {
id = 1,
removed=true,
...
}
order {
id = 1,
cust_fk = 1,
...
}
customer {
id = 1,
removed=true,
...
}
order {
id = 1,
cust_fk = null,
...
}
特别考虑典型的用例,例如加载订单并为其#customer 创建代理。如果我们确实认为第一个表单有效,那么在大多数明显的方面,这需要像 @NotFound 映射一样进行操作 - 除非我们物理地查看客户表,否则我们无法创建代理,从而失去了延迟加载的好处。不过,不允许它意味着 Hibernate 本身需要承担很多责任来强制执行引用完整性,这充其量也是一项艰巨的工作。