是否有任何使用hibernate的公认的,行之有效的方式来保存实体在数据库中的更改历史?
我们需要跟踪相当多的对象,并且希望能够撤消对对象的更改。
我尝试使用hibernate模式的拦截器,但是对象的旧状态仅在执行时可用merge()。大多数情况下我们update()还是这样做saveOrUpdate()…
merge()
update()
saveOrUpdate()
我目前正在让warp-persist和Guice一起管理会议。
我已经完成了一个拦截器(基于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());