2

Я пытаюсь перехватить выполнение запросов Hibernate, вот мой спящий режим отображенияКак перехватить гибернации запрос по типу столбца

<class name="com.model.Parent" table="Parent" 
     optimistic-lock="version" dynamic-update="true" dynamic-insert="true" 
     lazy="true" > 
<property name="id" 
      type="org.hibernate.usertype.UserType" column="OBJECT_ID" /> 
(Here UserType is GUID format)..... 

Если сгенерированный запрос как следующий

select * from Parent p_ where p_.id = ? OR p_.id in (?,?,?) 

необходимость заменить ? с HEXTORAW(?) для таблиц (столбцы, определенные с помощью RAW). Обязательный запрос должен быть, как этот

select * from Parent p_ where p_.id = HEXTORAW(?) OR p_.id in (HEXTORAW(?),HEXTORAW(?),HEXTORAW(?)) 

Поскольку я работаю с существующей системой, не может изменить типы столбцов базы данных.

Как найти столбцы, определенные RAW при выполнении запроса (если я использую перехватчики или любые другие фильтры)? и как подать заявку HEXTORAW() на найденные столбцы?

ответ

1

Вы можете использовать Interceptor.onPrepareStatement и зарегистрировать его в SessionFactory

Но вы должны убедиться, что перехватчик изменяет только необходимые параметры поля для HEXTORAW() не все.