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();
假设我有一个实体
@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();