一尘不染

Hibernate,保存对象的先前状态

hibernate

是否有任何使用hibernate的公认的,行之有效的方式来保存实体在数据库中的更改历史?

我们需要跟踪相当多的对象,并且希望能够撤消对对象的更改。

我尝试使用hibernate模式的拦截器,但是对象的旧状态仅在执行时可用merge()。大多数情况下我们update()还是这样做saveOrUpdate()

我目前正在让warp-persist和Guice一起管理会议。


阅读 188

收藏
2020-06-20

共1个答案

一尘不染

我已经完成了一个拦截器(基于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());
2020-06-20