【问题标题】:How to intercept hibernate query by column type如何按列类型拦截休眠查询
【发布时间】:2016-02-08 15:25:44
【问题描述】:

我正在尝试拦截 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()

【问题讨论】:

    标签: java hibernate spring-integration hibernate-mapping interceptor


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多