簡體   English   中英

休眠可審核的多對多關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM