Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有命名参数的Hibernate本机查询问题_Java_Sql_Hibernate_Postgresql - Fatal编程技术网

Java 具有命名参数的Hibernate本机查询问题

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本机查询有问题。我有一个选择数组切片(PostgreSQL数据库)

问题是hibernate将以下部分识别为命名参数:“SELECT my_array[1:300]…”中的“:300”,我得到以下异常:没有设置所有命名参数

我试图用“:”,“::”来逃避冒号(:),但没有成功


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"/>