我有以下簡單的數據結構(細節不再贅述):休眠Envers投擲EntityNotFoundException當獲取刪除父對象
@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修訂,就會拋出EntityNotFoundException試圖偷懶從_aud表中提取關聯的組。
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的延遲初始化,以防止被刪除轉類型的過濾?這將解決我的問題。我只是沒有看到任何可配置的東西。
我的另一種選擇是,就在org.hibernate.envers.store_data_at_delete再次,但我寧願如果可能的話,以保持它。這似乎有點像一個錯誤,但我是新來的Envers所以也許我只是看着這一切錯:-)
謝謝,我會提交錯誤報告。看起來像一個邊緣情況。 –
廣告同樣的問題,(假的,假的)解決了這個問題 – phury