【问题标题】:Set boolean to javax.persistenc.Query将布尔值设置为 javax.persistenc.Query
【发布时间】:2018-04-01 12:04:36
【问题描述】:

我们不使用休眠专有 API。 我们遵循纯 JPA 标准 API。 如何将布尔值设置为 JPQL 查询的参数?(javax.persistenc.Query) 以下不工作

    @NamedQuery(name = "Employee.getEmployeeByState", query = "select employee.id From Employee employee where employee.state=:inputState")


    Query getEmployeesExcluded = entityManager.createNamedQuery("Employee.getEmployeeByState");
    getEmployeesExcluded .setParameter("inputState", Boolean.FALSE);

【问题讨论】:

  • 当我对查询进行硬核时,它的工作 @NamedQuery(name = "Employee.getEmployeeByState", query = "select employee.id From Employee employee where employee.state=1")
  • 定义“不工作”。没错。
  • 不管employee.state TRUE/FALSE,它都会返回所有条目
  • 贴出实体的代码和表定义。还有一个测试用例。
  • Java 和 DB 状态表中的类型是什么?

标签: hibernate jpa


【解决方案1】:

问题可能会发生,因为在您的实体中,您应该将 state 属性设置为 boolean,但在您的数据库中,它应该是 tinyintint 或类似的东西(因为我们不知道您的我假设的实体),所以你可能应该使用typeConverter

@Entity
@NamedQuery(name = "Employee.getEmployeeByState", query = "select employee.id From Employee employee where employee.state=:inputState")
public class Employee implements Serializable {

    @TypeConverter(name="intToBoolean", dataType=Integer.class, objectType=Boolean.class)
    private boolean state;

    //getters and setters
}

here您可以找到有关该注释的更多信息。

编辑:

或者你可以实现自己的转换器,检查thisthisthis

【讨论】:

  • 提问者在使用Hibernate时,为什么要提到Toplink注解?
  • @AlanHay 你是对的,我没有注意到这是一个 Toplink 注释......我只是编辑答案;)
猜你喜欢
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 2012-07-08
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多