假设我有一个实体
@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();
关于java - JPQL——空值到 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58373762/