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

jpa-2.0 eclipselink jpql

45366 观看

9回复

166 作者的声誉

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

我用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)。有没有正确的方法来编写这个查询?

谢谢

作者: Rado Skrib 的来源 发布者: 2011 年 6 月 6 日

回应 (9)


0

294 作者的声誉

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

作者: punkyduck 发布者: 30.04.2012 02:57

0

21086 作者的声誉

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

作者: James 发布者: 01.05.2012 01:34

-4

20 作者的声誉

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

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

作者: minibi 发布者: 19.06.2014 11:57

1

1464 作者的声誉

我也遇到了这个问题(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;

    .......
}
作者: lazlev 发布者: 02.12.2015 04:07

15

185 作者的声誉

使用以下表格:

SELECT e FROM Employee e WHERE e.active = TRUE

有关详细信息,请参阅文档

作者: YUIOP QWERT 发布者: 07.12.2015 09:17

0

452 作者的声誉

您可以编写如下查询:

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

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

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

作者: Rahul Chauhan 发布者: 10.08.2017 06:53

1

47 作者的声誉

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);
作者: user2555212 发布者: 24.10.2017 06:32

0

32 作者的声誉

对于MySql工作原理:

public interface UserRepository extends JpaRepository<User, Long> {    
    @Query("SELECT e FROM  Employee e WHERE e.active=?1")
    User findByStatus(Boolean active);
}
作者: Kirill_code 发布者: 20.03.2019 03:46

0

189 作者的声誉

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

作者: Purushottam Sadh 发布者: 09.08.2019 11:59
32x32