我有以下设置:有各种实体(Projects
, Tests
, Users
),然后有TestReports
. TestReports
引用其他实体以及文件系统中的一些额外数据。
生成报告并且永远不会删除(出于审计目的)。但是,可以删除其他实体。当报告引用某些已删除的实体时,这会导致这种情况。从业务的角度来看,这没问题,报告可以只显示[deleted id123]
而不是删除的实体标签,这很好。但是,javax.persistence.EntityNotFoundException
当我尝试加载引用已删除实体的报告时,我得到了。
在这种情况下,有没有办法告诉 Hibernate/JPA 只创建带有 ID 和一些isDeleted
标志的幻像对象?
在 Hibernate Envers 文档中,我发现它们在遍历修订历史时支持类似的东西,但我还没有找到在“正常”实体中使用它的方法。
来自 Envers 文档:
第二个参数 selectDeletedEntities 指定是否应将删除实体的修订包含在结果中。如果是,则此类实体将具有修订类型 DEL 和所有字段,除了 id,null。
我知道通过deleted
在所有对象上引入标志并使用 if 进行软删除而不是实际删除的解决方法。但这增加了额外的开销,我想避免。