Hibernate @SoftDelete 与 @ManyToOne(fetch = FetchType.LAZY) 的问题

问题描述 投票:0回答:1

我正在尝试使用 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 中搜索答案,但没有成功。

java hibernate jpa spring-data-jpa
1个回答
0
投票

我能够在那个问题中找到原因。

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 本身需要承担很多责任来强制执行引用完整性,这充其量也是一项艰巨的工作。

© www.soinside.com 2019 - 2024. All rights reserved.