[英]Hibernate Auditable many-to-many relationships
考慮以下休眠配置:
<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>
現在,這兩個類(人和地址)具有可審核的接口。 在我們的Hibernate AuditInterceptor類(實現Interceptor)中,如果實體是Auditable的實例,則我們執行一些審核功能。 簡而言之,所有這些代碼都很好用...
但是,有一個PersonAddress表沒有經過審核,因為從技術上講它沒有POJO ...因此我們無法檢查某些“ instanceof”。 在休眠配置中,有什么方法可以告訴我們攔截此PersonAddress表? 也許我們需要處理Interceptor的其他動作之一(例如onCollectionUpdate)。 我不確定...
我認為強制審核的另一種方法是,將關系從Person轉換為一對多,從Person轉換為PersonAddress,從Address將一對多轉換為PersonAddress,並為PersonAddress創建另一個類元素,該元素可以執行到人和地址的一對一映射。
這似乎有點多余的工作,我真的想避免額外的工作。
有人可以提出更好的解決方案嗎?
謝謝!
您如何向某人添加地址,以及如何向某人添加地址? 由於您沒有PersonAddress的域對象,因此對這些關系的編輯必須是Person或Address之一,不是嗎?
如果是這樣,則將審核作為人員審核或地址審核的一部分進行。
例如,在“人”中:
class Person {
private List<Address> addedAddresses;
private Set<Address> addresses;
.
.
.
public void addAddress(Address toAdd) {
addedAddresses.add(toAdd);
addresses.add(toAdd);
}
}
然后,在審核Person時,如果記錄的條目不為空,則記錄該條目。
當然,這很簡單(刪除操作?編輯地址?),但是您的示例中沒有更多內容可做。
我無法通過多對多映射來解決這個問題,因此我將該映射轉換為一對多,並使用適當的休眠映射為PersonAddress創建了模型bean。
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.