【发布时间】:2014-03-16 16:07:56
【问题描述】:
我将 Hibernate Interceptor 与 (hibernate 4.x) 一起使用。我想对 Session 的保存方法进行一些操作。所以我扩展了 EmptyInterceptor。
它有以下几种方法:
onSave() //when save operation is preformed.
postFlush() //called after committed into database
问题:在 postFlush() 中我想执行 SAVE 操作。所以我的控制陷入了循环。因为当我调用 session.save() 时,会调用 EmptyInterceptor 的 onSave() 和 postFlush() 方法来拦截 SAVE 操作。
为了解决这个问题,我使用了两个会话工厂。 1 用于执行会话操作(保存、更新等),2 用于 HibernateIntercepter。
但我担心如何用单个 sessionFactory 解决这个问题??
公共类 AudiLogInterceptor 扩展 EmptyInterceptor {
public boolean onSave(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) {
return false;
}
// called after committed into database
public void postFlush(Iterator iterator) {
// want to perform SAVE operation here with Session.save()
// But whenever I open new seesion here. It falls in loop
Session tempSession = HibernateUtil.hibernateTemplateLog
.getSessionFactory().openSession();
try {
Item item = new Item();
item.setName("anyItem");
item.setValue("anyValue");
tempSession.save(item);
tempSession.flush();
} finally {
tempSession.close();
}
}
}
【问题讨论】:
标签: java hibernate spring-mvc interceptor