JPQL——空值到布尔值?

JPQL -- null to boolean?

假设我有一个实体

@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 非常有用的错误消息

The expression is invalid, which means it does not follow the JPQL grammar.

如何编写此查询?

我不知道你是否应该 运行 这个查询,但是语法的一种修复方法是使用 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();