考慮下面的hibernate配置:Hibernate的可審計的許多一對多的關係
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<set name="addresses" table="PersonAddress">
<key column="personId"/>
<many-to-many column="addressId"
class="Address"/>
</set>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
<set name="people" inverse="true" table="PersonAddress">
<key column="addressId"/>
<many-to-many column="personId"
class="Person"/>
</set>
</class>
現在,這兩個班組長(Person和Address)有一個可審覈的接口。在我們的Hibernate AuditInterceptor類(實現Interceptor)中,如果實體是可審計的實例,我們執行一些審計功能。總之,所有這些代碼的作品很好...
但是,這是PersonAddress表沒有得到審計,因爲我們沒有技術上有一個POJO它...所以我們不能檢查一些「的instanceof」。在hibernate配置中有任何方法可以告訴它攔截這個PersonAddress表嗎?也許我們需要處理攔截器的其他動作之一(如onCollectionUpdate)。我不確定...
我認爲強制審計的唯一方法是將關係轉換爲從Person到PersonAddress的一對多關係,從Address到PersonAddress的一對多關係併爲PersonAddress創建另一個類元素,將多對一映射返回給Person和Address。
這似乎有點像額外的工作,我真的想避免額外的工作。
有人可以提出更好的解決方案嗎?
謝謝!
我們實際上將數據添加到Person和Address對象。我們發現Hibernate不會更新PersonAddress表。 我們正在使用在Manning的Hibernate In Action(第343頁)中找到的AuditLogInterceptor的修改版本。總體思路保持不變,這意味着我們沒有檢查POJO的專業邏輯。如果提供的實體屬於可審計類型,我們將其添加到更新,插入或刪除的集合中。 我們可以放入這兩個特定類的邏輯,但是,我們真的不知道這種關係是否以某種方式發生了變化...... – 2009-05-06 14:36:16