Hibernate и Spring изменяют запрос перед отправкой в ​​БД

У меня есть запрос Hibernate, настроенный для выполнения с аннотацией Spring Data (@Repository). Я хочу поймать запрос до того, как он будет отправлен в БД, и при выполнении определенного условия немного изменить его.

Каков наилучший вариант для этого? Я предпочитаю решение JPA, а не решение Hibernate, но решение Hibernate также будет работать.


person Yuval Zilberstein    schedule 07.12.2014    source источник
comment
Опубликуйте свой код @Repository, который выполняет операцию db.   -  person Andy Dufresne    schedule 08.12.2014
comment
обработайте это на своем уровне дао. вам не нужно «ловить» запрос, а строить его с учетом этого конкретного условия.   -  person sergiu    schedule 08.12.2014


Ответы (1)


Если вы хотите изменить запрос после подготовленного оператора, вы можете сделать это в перехватчике Hibernate и зарегистрировать его во время настройки Spring DB.

Ваш MyInterceptor должен либо реализовывать Hibernate Interceptor.class, либо расширять EmptyInterceptor.class. Метод, который вы ищете, это:

public String onPrepareStatement(String sql);

Если вам нужно что-то еще, вы можете попробовать прослушиватели событий, но я не уверен, что для вашего случая они есть.

Вот некоторая документация:

Перехватчики и события Hibernate 4.0 Как интегрировать Interceptor с Spring

person R.Litto    schedule 25.03.2015
comment
Спасибо, приятно знать, что в Hybernate 5 реализован улучшенный механизм. - person R.Litto; 12.08.2019