Я использую Hibernate Interceptor с (hibernate 4.x). Я хочу выполнить некоторую операцию по методу сохранения сеанса. Поэтому я расширяю EmptyInterceptor.
Он имеет следующие методы:
onSave() //when save operation is preformed.
postFlush() //called after committed into database
ПРОБЛЕМА: в postFlush() я хочу выполнить операцию SAVE. Так что мой контроль застрял в петле. потому что когда session.save() вызывается моими вызовами, метод onSave() и postFlush() класса EmptyInterceptor вызывается для перехвата операции SAVE.
ЧТОБЫ устранить эту проблему, я использовал ДВЕ фабрики сеансов. 1 для выполнения операций сеанса (сохранение, обновление и т. д.) и 2-й для HibernateIntercepter.
Но меня беспокоит, как я могу решить эту проблему с помощью одного сеанса Factory ??
открытый класс 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();
}
}
}