Я использую Hibernate Interceptor с (hibernate 4.x). Я хочу выполнить некоторую операцию по сохранению метода сеанса. Поэтому я расширяю EmptyInterceptor.Как использовать single sessionFactory для спящего режима Intercepter
Он имеет следующие методы:
onSave() //when save operation is preformed.
postFlush() //called after committed into database
ПРОБЛЕМА: в postFlush() Я хочу, чтобы выполнить операцию SAVE. Так что мой контроль застрял в цикле. потому что whenver session.save() вызывается моими вызовами, метод onSave() и postFlush() EmptyInterceptor получил вызов для перехвата операции SAVE.
Чтобы устранить эту проблему, я использовал TWO сессионные заводы. 1 для выполнения сеансовых операций (сохранение, обновление и т. Д.) И 2-й для HibernateIntercepter.
Но я беспокоюсь, как я могу разобраться с этой проблемой с помощью single 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();
}
}
}
На самом деле я использую перехватчик для спящего режима для AUDIT LOGGING. Значит, всякий раз, когда будет какая-либо операция SAVE или UPDATE, мой перехватчик будет использовать этот метод и вставить новую запись в таблицу журнала аудита (информация о сущности, что на самом деле было раньше и что является текущим). Вот код ссылки. http://www.mkyong.com/hibernate/hibernate-interceptor-example-audit-log/ – user3029929
В приведенной ссылке примера автор связывает перехватчик с определенным сеансом, поэтому, если он сохраняет или обновление у него не было бы проблемы с циклом. Вы привязываете это к сеансу? или вы применили перехватчик для всего приложения? Если вы подали заявку на сеанс, то, пожалуйста, взгляните на работу, о которой я упоминал, определите объект, который находится в пост-флеше, если это объект AuditLog, затем пропустите блок сохранения аудита, поэтому последующее сохранение будет не следует вызывать, чтобы программа не переходила в цикл. – Zeus
Можете ли вы сообщить мне, как связать перехватчик с сеансом? Я не могу найти метод на sessionfactory, который принимает Connection как аргумент – user3029929