Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Envers在获取已删除的父对象时引发EntityNotFoundException_Hibernate_Hibernate Envers - Fatal编程技术网

Hibernate Envers在获取已删除的父对象时引发EntityNotFoundException

Hibernate Envers在获取已删除的父对象时引发EntityNotFoundException,hibernate,hibernate-envers,Hibernate,Hibernate Envers,我有以下简单的数据结构(为了简洁起见,省略了细节): 有没有办法调整Envers中的延迟初始化,以防止过滤已删除的rev类型?那会解决我的问题。我只是没有看到任何可配置的东西 我的另一个选择是再次将org.hibernate.envers.store_data_保存在_delete,但如果可能的话,我更愿意保持打开状态。这看起来有点像一个bug,但我对Envers是新手,所以可能我只是看错了:-)不幸的是,在浏览已删除实体的图形时,这看起来像一个bug。请到办公室报到 解决方案可能是不在查询中选

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

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


我的另一个选择是再次将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)