Рассмотрим следующую конфигурацию гибернации:
<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>
Теперь эти два класса (Персона и Адрес) имеют интерфейс Auditable. В нашем классе Hibernate AuditInterceptor (реализует Interceptor) мы выполняем некоторую функцию аудита, если сущность является экземпляром Auditable. Короче говоря, весь этот код прекрасно работает ...
Тем не менее, есть эта таблица PersonAddress, которая не подвергается аудиту, потому что у нас технически нет POJO для нее ... поэтому мы не можем проверить наличие "instanceof". Есть ли способ в конфигурации гибернации, что мы можем сказать ему Перехватить эту таблицу PersonAddress? Может быть, нам нужно обработать одно из других действий от Перехватчика (например, onCollectionUpdate). Я не уверен ...
Единственный другой способ заставить его выполнить Audit - преобразовать отношение один-ко-многим из Person в PersonAddress, один-ко-многим из Address в PersonAddress и создать еще один элемент класса для PersonAddress, который выполняет сопоставления "многие-к-одному" обратно на Персона и Адрес.
Это похоже на дополнительную работу, и я действительно хочу избежать дополнительной работы.
Может кто-нибудь предложить лучшее решение?
Спасибо!