Hibernate Envers在获取已删除的父对象时引发EntityNotFoundException
我有以下简单的数据结构(为了简洁起见,省略了细节): 有没有办法调整Envers中的延迟初始化,以防止过滤已删除的rev类型?那会解决我的问题。我只是没有看到任何可配置的东西Hibernate Envers在获取已删除的父对象时引发EntityNotFoundException,hibernate,hibernate-envers,Hibernate,Hibernate Envers,我有以下简单的数据结构(为了简洁起见,省略了细节): 有没有办法调整Envers中的延迟初始化,以防止过滤已删除的rev类型?那会解决我的问题。我只是没有看到任何可配置的东西 我的另一个选择是再次将org.hibernate.envers.store_data_保存在_delete,但如果可能的话,我更愿意保持打开状态。这看起来有点像一个bug,但我对Envers是新手,所以可能我只是看错了:-)不幸的是,在浏览已删除实体的图形时,这看起来像一个bug。请到办公室报到 解决方案可能是不在查询中选
我的另一个选择是再次将org.hibernate.envers.store_data_保存在_delete,但如果可能的话,我更愿意保持打开状态。这看起来有点像一个bug,但我对Envers是新手,所以可能我只是看错了:-)不幸的是,在浏览已删除实体的图形时,这看起来像一个bug。请到办公室报到
解决方案可能是不在查询中选择已删除的实体:forRevisionsOfEntity(设置Sentry、false、false)。列表的最后一个元素将是删除时的实体。谢谢,我将提交一份错误报告。看起来像是边缘案件。
@Audited
@Entity
class SettingsGroup implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id
@OneToMany(mappedBy = "group", cascade = [CascadeType.ALL])
@OrderBy("key")
List<SettingsEntry> entries = []
}
@Audited
@Entity
class SettingsEntry implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id
@ManyToOne
SettingsGroup group
}
def reader = AuditReaderFactory.get(manager)
def query = reader.createQuery().forRevisionsOfEntity(SettingsEntry, false, true)
audits = query.resultList.collect {
//noinspection GroovyAssignabilityCheck
new AuditRevision<T>(entity:it[0], revision: it[1], type: it[2])
}
select *
from settings_group_aud sg
where sg.rev=(
select max(sg2.rev) from settings_group_aud sg2 where sg2.rev<=3 and sg.id=sg2.id
) and sg.revtype<>2 and sg.id=1
select * from SETTINGS_GROUP_AUD;
ID NAME ENVIRONMENT KEY_NAME REV REVTYPE
1 test prod Default Key 2 0
1 test prod Default Key 3 2
(2 rows, 1 ms)