如何用布尔条件编写JPA查询

问题描述 投票:15回答:8

在我的项目中,我使用JPA 2.0和eclipselink实现,我有以下问题:

我用boolean列定义了实体:

@Entity
public User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="USR_ID")
    private Short id;

    @Column(name="USR_NAME")
    private String name;

    @Column(name="USR_ACTIVE")
    private boolean active;

    .......

}

我想创建将返回所有活动用户的查询,如下所示:

从用户u中选择你,其中u.active = TRUE;

但是,如果我使用该查询,我得到的异常是布尔值不能转换为Short(数据库中的列存储为smallint)。有没有正确的方法来编写这个查询?

谢谢

jpa-2.0 eclipselink jpql
8个回答
15
投票

使用以下表格:

SELECT e FROM Employee e WHERE e.active = TRUE

有关更多信息,请参阅the docs


1
投票

我也遇到了这个问题(PostgreSQL + Eclipselink),并使用@TypeConverter@Convert注释。

@Entity
@TypeConverter(name = "booleanToInteger", dataType = Integer.class)
public User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="USR_ID")
    private Short id;

    @Column(name="USR_NAME")
    private String name;

    @Column(name="USR_ACTIVE")
    @Convert("booleanToInteger")
    private boolean active;

    .......
}

1
投票
SELECT e FROM  Employee e WHERE e.active = TRUE

在上面的查询中,如何将TRUE / FALSE作为用户参数传递?当我在下面尝试时,它不会根据用户输入返回值(TRUE / FALSE)。

这是命名查询

        SELECT e FROM  Employee e WHERE e.active = :inputValue

在这里我调用上面的名称查询

Query getEmployeesByState= entityManager.createNamedQuery("above query name");
   getEmployeesByState.setParameter("active", Boolean.FALSE);

0
投票

我使用EclipseLink作为JPA提供程序和MySQL数据库。使用此配置,使用1表示true,0表示false表示。


0
投票

你可以使用@TypeConverter(dataType = Integer.class)


0
投票

您可以编写如下查询:

@Query(“通过u.active从用户u order中选择你”);

它将首先显示非活动用户。如果你想看到活跃用户首先使用如下:

@Query(“通过u.active desc从用户u order中选择你”);


0
投票

对于MySql工作原理:

public interface UserRepository extends JpaRepository<User, Long> {    
    @Query("SELECT e FROM  Employee e WHERE e.active=?1")
    User findByStatus(Boolean active);
}

0
投票

它在我的场景中工作:findByTitleAndDocumentIdAndIsDeleted(String title,UUID docId,Boolean isDeleted);


-4
投票

TRUE是一个特殊的关键字。尝试

从用户u中选择u,其中u.active为TRUE;

© www.soinside.com 2019 - 2024. All rights reserved.