考虑下面的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