假设我有一个实体
@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语法。
您如何编写此查询?
我不知道您是否应该像这样运行此查询,但是语法的一种解决方法是使用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();