【问题标题】:Hibernate Criteria Query like operator on CLOB (Postgres 8.4)CLOB (Postgres 8.4) 上的 Hibernate Criteria Query like operator
【发布时间】:2011-10-15 22:36:01
【问题描述】:

我有一个条件查询不起作用。这里是模型:

@Entity
public class Flaw extends BaseEntity implements Serializable {
    ...
    @Lob
    @Basic(fetch=FetchType.LAZY)
    private String text;
    ...

这个查询将由 hibernate 执行(来自 Logs):

Hibernate: 
    select
        ...
        flaw0_.text as col_7_0_,
        ...
    from
        Flaw flaw0_,
    where
        ...
        and (
            flaw0_.text like ?
        ) 
    order by
        flaw0_.text desc

然后我得到以下 StackTrace:

3171 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42883
3171 [main] ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: operator does not exist: text ~~ bigint
3198 [main] INFO org.hibernate.impl.SessionFactoryImpl - closing

使用 oder 属性可以正常工作,只是使用 CLOB 上的 like 运算符无法正常工作。这是 Hibernate 还是 Postgres 问题?或者这种类型的查询在 CLOB 上是不可能的?

我正在使用:

  • 休眠 3.6.3
  • PostgreSQL 8.4.8
  • 带有 SSL 的 PostgreSQL 8.3 JDBC3(内部版本 603)

有什么想法吗?

更新: 我做了一些进一步的调查:

  • 以上注解正确创建了text postgres 类型
  • 如果我运行 sql 查询,hibernate 会打印出来,它可以工作。

BR

雷内-

【问题讨论】:

    标签: java hibernate postgresql jpa jpa-2.0


    【解决方案1】:

    经过尝试,我发现以下解决方案对我有用。我必须添加以下注释,现在它可以工作了:

    @Type(type = "org.hibernate.type.TextType")
    

    【讨论】:

      【解决方案2】:

      这似乎不可能,因为您的 Postgres 版本完全支持 CLOB:http://www.postgresql.org/docs/8.4/interactive/unsupported-features-sql-standard.html

      【讨论】:

      • 这是一个关于同一主题的有趣主题:groups.google.com/group/h2-database/browse_thread/thread/…。那里的用户需要修改 Hibernate 代码才能使其工作;不确定更新是否进入主 Hibernate 主干。
      • 感谢您的帮助。我终于找到了无需修改代码的解决方案。看我的回答。
      猜你喜欢
      • 2015-01-17
      • 2011-05-11
      • 2014-10-03
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 2014-11-27
      • 2013-03-13
      相关资源
      最近更新 更多