我的应用程序包含spring @transaction和hibernate。我正在尝试使用hibernate拦截器。我将拦截器注册为
getHibernateTemplate().getSessionFactory().withOptions().interceptor(interceptor).openSession();
实际的拦截器扩展了EmptyInterceptor,我重写了onSave()方法。
问题是调用了拦截器onSave()方法,但之后,实际实体不会插入到数据库中。
public boolean onSave(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) {
System.out.println("inside interceptor - on save");
{
// my changes here . setting a field of the entity.
return true;
}
return false;
}
答案 0 :(得分:0)
在之前调用保存对象。拦截器可以修改状态,该状态将用于SQL INSERT并传播到持久对象。
因此,更改将提交给持久对象和Hibernate将向数据库发出的INSERT
语句。
如果您使用与打开事务的会话不同的会话查询数据库,则可能需要确保在@Transactional
方法完成后搜索记录。那时Spring将把事务提交到数据库。
您还可以尝试使用Interceptor.afterTransactionCompletion()检查记录是否已插入效果。
提交或回滚事务后调用。