我遇到了Hibernate Native Query的问题。我有一个选择数组切片的SELECT(PostgreSQL数据库)。
问题是hibernate识别以下部分:“SELECT my_array [1:300] ...”中的“:300”作为命名参数,我得到以下异常:并未设置所有命名参数。
我试图用':','::'来逃避冒号(:),但没有成功。
Hibernate版本是3.2
答案 0 :(得分:4)
我不使用PostgreSQL,但是如果找不到适合这个问题的解决方案,你可以实现一个拦截器(扩展EmptyInterceptor)并在onPrepareStatement(String sql)
上修改你的查询。
这意味着您可以使用my_array[1|300]
之类的内容并将其重写为my_array[1:300]
以解决命名参数问题。
编辑:我不是100%确定上述工作(重写本机SQL以及查询解析器是否允许特殊字符)。我只在HQL和标准中完成了上述操作,我将索引提示作为查询注释传递。
答案 1 :(得分:3)
冒号本身在Hibernate中无法逃脱(自2005年以来已知Bug)。
答案 2 :(得分:1)
create function array_slice(a anyarray, start int4, end int4) returns anyarray as
$$
SELECT a[start:end];
$$
language(sql);
现在调用此函数。没试过,但它会以某种方式工作。
答案 3 :(得分:1)
MyInterceptor extends EmptyInterceptor
按照cherouvim的说法工作。
别忘了
<property name="hibernate.ejb.interceptor" value="MyInterceptor"/>
persistence.xml中的