我对 Hibernate - Envers 有疑问。我有一个域对象,它只有一个审核属性status
,可以是数字 0、1、2、3、4、5 之一。
@Entity
public class Item {
...
@Audited
private int status;
... other variables, setter/getter, ...
}
现在,Envers 和 Hibernate 中的一切都在工作。创建一个新的 Item 对象并将其添加到数据库中,将一行插入到Item_AUD
数据库表中。
但是现在我在更新它时遇到了问题。我在 Hibernate Dao 实现中的更新如下所示:
public void updateItem(Item i) {
SessionFactory sessionFac = HibernateUtility.getSessionFactory();
Session s = sessionFac.getCurrentSession();
Transaction trans = s.beginTransaction();
s.update(i);
s.flush();
trans.commit();
}
在每次更新时,这都会打印在我的控制台上:
Hibernate: update Item set amount=?, description=?, status=? where id=?
Hibernate: insert into REVINFO (REVTSTMP) values (?)
Hibernate: insert into Item_AUD (REVTYPE, status, id, REV) values (?, ?, ?, ?)
但问题是,我只想在状态编号发生变化的情况下插入REVINFO
一行Item_AUD
!
例如:我更改了description
项目,通过调用执行更新,updateItem
然后 Envers 将新修订写入审计表。但我不想要这种行为。
我想要的是:只有当 的值status
发生变化时,Envers 才应该将数据库条目写入审计表中。
但是我该怎么做呢?
最好的问候,蒂姆。