【问题标题】:JPQL -- null to boolean?JPQL - null 到布尔值?
【发布时间】:2020-02-10 21:36:34
【问题描述】:

假设我有一个实体

@Entity
@Table(name = "foos")
class Foo{
   @Id
   @Generatedvalue(strategy = IDENTITY)
   private Long id;

   @ManyToOne
   @JoinColumn(name = "bar_id")
   private Bar bar;

   ...
}

还有一个投影应该给我一个id 和一个boolean 告诉我实例是否有一个Bar

interface FooProjection{
    String getId();
    Boolean hasBar();
}

您如何编写 JPQL 查询?

我试过

@Query(
    "SELECT"
    "   f.id,"
    "   (f.bar IS NOT NULL) AS bar"
    " FROM Foo f"
)
List<FooProjection> findProjections();

这给了我一个org.eclipse.persistence.exceptions.JPQLException 并带有非常有用的错误消息

表达式无效,表示它不遵循 JPQL 语法。

你是如何编写这个查询的?

【问题讨论】:

  • 不应该是这样的@Query( "SELECT f.id, f.bar AS bar FROM Foo f where f.bar IS NOT NULL" )
  • @pvpkiran 不,我想要一个布尔值来告诉我Foo 是否有Bar

标签: java spring spring-data-jpa jpql projection


【解决方案1】:

我不知道您是否应该按原样运行此查询,但语法的一种解决方法是使用 CASE 表达式:

@Query(
    "SELECT"
    "   f.id,"
    "   CASE WHEN f.bar IS NOT NULL THEN TRUE ELSE FALSE END AS bar"
    " FROM Foo f"
)
List<FooProjection> findProjections();

【讨论】:

    猜你喜欢
    • 2012-08-16
    • 2015-06-29
    • 2019-08-17
    • 2016-07-20
    • 2015-11-29
    • 1970-01-01
    • 2012-04-18
    • 2013-04-15
    • 2018-11-10
    相关资源
    最近更新 更多