带有命名参数的Hibernate Native Query问题
我有Hibernate Native Query的问题。 我有一个选择数组切片的SELECT(PostgreSQL数据库)。
问题是hibernate识别以下部分:“SELECT my_array [1:300] …”中的“:300”作为命名参数,我得到以下exception:并未设置所有命名参数。
我试图用’:’,’::’来逃避冒号(:),但没有成功。
Hibernate版本是3.2
我不使用PostgreSQL,但如果你没有找到适合这个问题的解决方案,你可以实现一个拦截器(扩展EmptyInterceptor)并修改onPrepareStatement(String sql)
上的查询。
这意味着您可以使用类似my_array[1|300]
并将其重写为my_array[1:300]
以解决命名参数问题。
编辑 :我不是100%确定以上工作(重写本机SQL以及查询解析器是否允许特殊字符)。 我只在HQL和标准中完成了上述操作,我将索引提示作为查询注释传递。
在Hibernate本身中,冒号无法逃脱(自2005年以来已知的Bug )。
create function array_slice(a anyarray, start int4, end int4) returns anyarray as $$ SELECT a[start:end]; $$ language(sql);
现在调用此函数。 没试过,但它会以某种方式工作。
MyInterceptor extends EmptyInterceptor
工作,如cherouvim所述。
别忘了
在persistence.xml中
- Spring 3.1 + Hibernate 4.1 Propagation.Supports问题
- 如何在运行时在Hibernate中创建数据库?
- JPA:@Embeddable对象如何获取对其所有者的引用?
- 基于日期的ehcache
- Hibernate / JPA注释 – 未知实体
- Spring源码套件spring3 + Hibernate4 + maven 3 + MySQL 5
- Hibernate加入两个表并获取所有记录?
- 当两个表具有相同的列名时,NonUniqueDiscoveredSqlAliasException
- 带有@Transactional注释的Spring OpenSessionInViewFilter