JPA Hibernate Postgres Error - 运算符不存在:boolean = integer

时间:2015-01-20 04:30:30

标签: java hibernate postgresql jpa

当项目部署到Linux机器上的tomcat服务器时,我遇到了NamedQuery的问题。我的环境如下:

  1. CentOS 6.3
  2. Postgres 8.4
  3. JPA 2.1
  4. Hibernate 3.2.8
  5. NamedQuery是

    Select dv FROM DocumentVersion dv where dv.isPublished=false
    

    当在Windows机器上执行此查询时,它工作正常但是当项目部署在具有上述配置的服务器上时,页面显示异常并出现以下错误:

      

    错误2015-01-04 22:30:33   org.hibernate.engine.jdbc.spi.SqlExceptionHelper:146 - 错误:运算符   不存在:boolean = integer提示:没有运算符匹配   给定名称和参数类型。您可能需要添加显式类型   管型。位置:649

    当我将查询更改为:

    Select dv FROM DocumentVersion dv where dv.isPublished =:isPublished
    

    即。将boolean作为参数传递给NamedQuery,它在两个平台上都可以正常工作。

    我想知道我是否需要在linux机器上添加/更新任何配置,或者我做错了什么。

    表架构

    CREATE TABLE DocumentVersion (
      id SERIAL NOT NULL,
      uuid varchar(100) NOT NULL,
      displayName varchar(100) NOT NULL,
      fileName varchar(100) NOT NULL,
      fileDescription varchar(255) DEFAULT NULL,
      filePath varchar(2048) DEFAULT NULL,
      mimeType varchar(255) NOT NULL,
      version INTEGER NOT NULL,
      fileSize BIGINT NOT NULL,
      isPublished boolean NOT NULL DEFAULT false,
      PRIMARY KEY (id)
    );
    

2 个答案:

答案 0 :(得分:2)

试试这个。

Select dv FROM DocumentVersion dv where dv.isPublished= "false"

Select dv FROM DocumentVersion dv where dv.isPublished is false

对于布尔数据类型,PostgreSQL喜欢"true""false"

请参阅此处documentation了解更多信息。

答案 1 :(得分:-1)

在查看documentation后首先猜测 - 你应该在大写中使用false这个词,即FALSE