我试图拦截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 (?,?,?)
需要将?
替换为HEXTORAW(?)
表(使用RAW定义的列)。
必需的查询应该是这样的
select * from Parent p_ where p_.id = HEXTORAW(?) OR p_.id in (HEXTORAW(?),HEXTORAW(?),HEXTORAW(?))
由于我正在使用现有系统,因此无法更改数据库列类型。
如何查询RAW在查询执行时定义的列(如果我使用拦截器或任何其他过滤器)? 以及如何在找到的列上应用 HEXTORAW()?
答案 0 :(得分:1)
您可以使用Interceptor.onPrepareStatement并将其注册为SessionFactory
但你必须确保拦截器只修改HEXTORAW()所需的字段参数。