0

我有以下存储库代码:

        @Query("SELECT " + FIELDS + " FROM Session ssn WHERE "
        + "(ssn.startDate BETWEEN :startDate AND :endDate ) AND endDate IS     
:closed ? NOT : '' NULL ")
        List<Session> findByDateAndStatus(@Param("startDate)Date startDate,@Param("endDate")Date endDate,@Param("closed")Boolean closed);

此代码不起作用。我希望此查询根据提供的布尔参数获取关闭的会话或打开的会话。

"AND endDate IS :closed ? NOT : '' NULL "

我想根据我的自定义布尔参数编写 HQL 字符串。怎么做?

4

1 回答 1

0

这不起作用的原因是您混合了 HQL 和 Java 语法。相反,您需要使用 HQL(或 JPQL)语法来获取可以与绑定值正确比较的值。像这样的东西应该工作:

... AND CASE WHEN (endDate IS NULL) THEN FALSE ELSE TRUE = :closed

另请参阅:如何使用 JPA 在 NamedQuery 中测试布尔参数?JPQL中是否有这样的 CASE 表达式?

于 2017-11-02T07:51:33.793 回答