是否有任何普遍接受的、经过验证的使用 hibernate 的方法,可以在数据库中保留实体更改的历史记录?
我们需要跟踪相当多的对象,并且希望能够撤消对对象的更改。
我尝试使用hibernate的拦截器,但对象的旧状态仅在执行merge()
时可用。大多数情况下,我们都会执行 update()
或 saveOrUpdate()
...
我目前让 warp-persist 与 Guice 一起管理 session 。
最佳答案
我已经使用拦截器完成了此操作(根据 EmptyInterceptor 创建我自己的拦截器)。我能够在 onFlushDirty() 中获取所有更改(合并、保存、saveOrUpdate 和删除)。
EmptyInterceptor的方法我用过:
@Override
public boolean onFlushDirty(Object object, Serializable id,
Object[] newValues, Object[] oldValues, String[] properties,
Type[] types) throws CallbackException {
@Override
public boolean onSave(Object object, Serializable id, Object[] newValues,
String[] properties, Type[] types) throws CallbackException {
@Override
public void onDelete(Object object, Serializable id, Object[] newValues,
String[] properties, Type[] types) throws CallbackException {
在 onFlushDirty() 中,我必须查询实体之前的状态:
Connection c = sessionFactory.getCurrentSession().connection();
Session session = sessionFactory.openSession(c);
BaseEntity newBaseEntity = (BaseEntity) object;
BaseEntity oldBaseEntity = (BaseEntity) session.get(newBaseEntity.getClass(), newBaseEntity.getId());
关于Hibernate,保存对象之前的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1927098/