JPQL —是否为布尔值?

问题描述 投票:0回答:1

假设我有一个实体

@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语法。

您如何编写此查询?

java spring spring-data-jpa jpql projection
1个回答
3
投票

我不知道您是否应该像这样运行此查询,但是语法的一种解决方法是使用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();
© www.soinside.com 2019 - 2024. All rights reserved.