【问题标题】:Hibernate Native Query problem with named parameters带有命名参数的 Hibernate Native Query 问题
【发布时间】:2011-02-17 04:59:25
【问题描述】:

我遇到了 Hibernate Native Query 的问题。我有一个选择数组切片(PostgreSQL 数据库)的 SELECT。

问题是休眠识别以下部分:“SELECT my_array[1:300]...”中的“:300”作为命名参数,我得到以下异常:并非所有命名参数都已设置。

我尝试使用 ':' 、 '::' 转义冒号 (:) 但没有成功。

Hibernate 版本是 3.2

【问题讨论】:

    标签: java sql hibernate postgresql


    【解决方案1】:

    我不使用 PostgreSQL,但如果您没有找到适合此问题的解决方案,您可以实现一个拦截器(扩展 EmptyInterceptor)并在 onPrepareStatement(String sql) 上修改您的查询。

    这意味着您可以使用 my_array[1|300] 之类的东西并将其重写为 my_array[1:300] 以解决命名参数问题。

    编辑:我不能 100% 确定上述方法是否有效(重写本机 SQL 以及查询解析器是否允许使用特殊字符)。我只在 HQL 和条件中完成了上述操作,其中我将索引提示作为查询注释传递。

    【讨论】:

      【解决方案2】:

      冒号在 Hibernate 本身中是不可转义的(自 2005 年以来已知为 Bug)。

      【讨论】:

        【解决方案3】:
        create function array_slice(a anyarray, start int4, end int4) returns anyarray as   
        $$
            SELECT a[start:end];
        $$
        language(sql);
        

        现在改为调用此函数。没试过,但它会像这样工作。

        【讨论】:

          猜你喜欢
          • 2019-05-29
          • 2011-06-07
          • 1970-01-01
          • 1970-01-01
          • 2011-03-13
          • 2011-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多