2016-08-03 3 views
0

мое приложение состоит из пружинного @transaction с спящим режимом. Я пытаюсь использовать перехватчик спящего режима. я зарегистрировал перехватчик, какЗапись не вставлена ​​после перехватчика onSave()

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

По Interceptor.onSave():

Вызывается перед тем сохраняется объект. Перехватчик может изменять состояние, которое будет использоваться для SQL INSERT и распространено на постоянный объект.

Таким образом, изменения передаются постоянному объекту и оператору INSERT, который Hibernate будет выдавать в базу данных.

Возможно, вам захочется убедиться в том, что вы ищете запись после завершения метода @Transactional, если вы запрашиваете базу данных с другим сеансом, чем тот, который открыл транзакцию. То есть, когда Spring фиксирует транзакцию в базе данных.

Вы также можете попробовать использовать Interceptor.afterTransactionCompletion(), чтобы проверить, действительно ли запись введена.

Вызывается после совершения сделки или откат.

+0

спасибо, да, я изменяю состояние постоянного объекта, но запрос вставки никогда не запускается даже после завершения транзакции – shiva

Смежные вопросы