2013-03-14 38 views
2

我正在使用Hibernate Envers將所有更改記錄到數據庫。我注意到,當我添加一個與另一個實體具有ManyToOne關係的實體時,也在一個實體上進行了修訂。外鍵在關係的許多方面,因此當在多方添加實體時,映射一方的實體未被更新。但是,在該映射的一邊還爲該實體插入了修訂版。不審覈OneToMany關係的缺點是什麼?

我在使用該方法的一對多映射禁用審計建議位置: Whats the difference between @NotAudited and RelationTargetAuditMode.NOT_AUDITED in Hibernate EnVers?

現在,這個回答表明,當我取回的關係也總是會返回當前實體。這是否意味着我無法在舊版本的映射的一側獲得信息?

我不知道在這一點上我將如何查詢審計日誌,但從表結構看來,我可以在任何時間點獲得實體的當前狀態。

假設我選擇不審計OneToMany映射,下面的表結構會發生什麼?

審計在修訂版1 OneSideEntity OneSideEntity OneSideEntity在版本5

審計在修訂2 ManySideEntity1 ManySideEntity1 ManySideEntity1在修訂3 ManySideEntity1在修訂版4

審計在修訂ManySideEntity2 ManySideEntity2 6 修訂版本7的ManySideEntity2 修訂版本8的ManySideEntity2 版本9的ManySideEntity2

ManySideEntity對象都指向OneSideEntity。

當我查詢修訂版本5 - [ManySideEntity1]或[ManySideEntity1,ManySideEntity2]中的一對多映射時,我將獲得哪些實體。

上面的問題表明我會得到後者,但在修訂版5中,我更喜歡第一個。我在這裏錯過了什麼嗎?

同樣對於給定的時間戳,我想我可以找到所有修訂版少於那個時間戳。這可確保我在AUDITING日誌中具有準確的表格信息。如果答案是[ManySideEntity1,ManySideEntity2]爲什麼會有信息丟失?

回答