JPQL——空值到布尔值?

Use*_*291 1 java spring projection jpql spring-data-jpa

假设我有一个实体

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

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

   ...
}
Run Code Online (Sandbox Code Playgroud)

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

interface FooProjection{
    String getId();
    Boolean hasBar();
}
Run Code Online (Sandbox Code Playgroud)

如何编写 JPQL 查询?

我确实尝试过

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

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

该表达式无效,这意味着它不遵循 JPQL 语法。

你如何编写这个查询?

Tim*_*sen 5

我不知道您是否应该运行此查询,但语法的一种修复方法是使用表达式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();
Run Code Online (Sandbox Code Playgroud)