【问题标题】:Hibernate Envers throwing EntityNotFoundException when fetching deleted parent objectsHibernate Envers 在获取已删除的父对象时抛出 EntityNotFoundException
【发布时间】:2012-11-06 01:26:51
【问题描述】:

我有以下简单的数据结构(为简洁起见省略了细节):

@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

}

我设置了 org.hibernate.envers.store_data_at_delete=true 标志。在获取 SettingsEntry 的修订后,它会在尝试从 _aud 表中延迟获取关联的组时抛出 EntityNotFoundException。

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])
}   

我查看了生成的 SQL,它似乎在尝试获取导致没有记录显示的父记录时过滤掉删除修订类型:

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)

有没有办法调整 Envers 中的延迟初始化以防止过滤已删除的 rev 类型?那将解决我的问题。我只是没有看到任何可配置的东西。

我的另一个选择是再次关闭 org.hibernate.envers.store_data_at_delete,但如果可能的话,我更愿意继续使用它。这似乎有点像一个错误,但我是 Envers 的新手,所以也许我只是看错了:-)

【问题讨论】:

    标签: hibernate hibernate-envers


    【解决方案1】:

    不幸的是,在浏览已删除实体的图表时,这看起来像是一个错误。请向https://hibernate.onjira.com/secure/Dashboard.jspa举报。

    解决方案可能不是在查询中选择已删除的实体:forRevisionsOfEntity(SettingsEntry, false, false)。列表的最后一个元素将是删除时的实体。

    【讨论】:

    • 谢谢,我会提交错误报告。看起来像一个边缘案例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2012-12-17
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多