Java 具有命名参数的Hibernate本机查询问题
我对Hibernate本机查询有问题。我有一个选择数组切片(PostgreSQL数据库) 问题是hibernate将以下部分识别为命名参数:“SELECT my_array[1:300]…”中的“:300”,我得到以下异常:没有设置所有命名参数 我试图用“:”,“::”来逃避冒号(:),但没有成功Java 具有命名参数的Hibernate本机查询问题,java,sql,hibernate,postgresql,Java,Sql,Hibernate,Postgresql,我对Hibernate本机查询有问题。我有一个选择数组切片(PostgreSQL数据库) 问题是hibernate将以下部分识别为命名参数:“SELECT my_array[1:300]…”中的“:300”,我得到以下异常:没有设置所有命名参数 我试图用“:”,“::”来逃避冒号(:),但没有成功 Hibernate版本是3.2我不使用PostgreSQL,但如果您没有找到解决此问题的适当解决方案,您可以实现一个拦截器(扩展EmptyInterceptor)并在onPrepareStatemen
Hibernate版本是3.2我不使用PostgreSQL,但如果您没有找到解决此问题的适当解决方案,您可以实现一个拦截器(扩展EmptyInterceptor)并在
onPrepareStatement(字符串sql)
上修改查询
这意味着您可以使用类似于my|u array[1 | 300]
的东西,并将其重写为my|u array[1:300]
来解决命名参数问题
编辑:我不能100%确定上述方法是否有效(重写本机SQL以及查询解析器是否允许使用特殊字符)。我只在HQL和criteria中做了上述操作,我将索引提示作为查询注释传递。在Hibernate中冒号本身是不可转义的(自2005年起就知道了)
现在调用这个函数。没有尝试过,但它会以某种方式像这样工作。
MyInterceptor扩展了EmptyInterceptor
如cherouvim所述工作
别忘了
<property name="hibernate.ejb.interceptor" value="MyInterceptor"/>
在persistence.xml中
<property name="hibernate.ejb.interceptor" value="MyInterceptor"/>