我正在尝试拦截Hibernate查询执行,这是我的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 (?,?,?)


对于表(用RAW定义的列),需要用?替换HEXTORAW(?)
必需的查询应该是这样的

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


由于我正在使用现有系统,因此无法更改数据库列类型。

如何在查询执行时查找由RAW定义的列(如果我使用拦截器或任何其他过滤器)?
以及如何在找到的列上应用HEXTORAW()?

最佳答案

您可以使用Interceptor.onPrepareStatement并将其注册为SessionFactory

但是您必须确保拦截器仅将必需的字段参数修改为HEXTORAW(),而不是全部。

10-04 12:15