Java 在WHERE子句中使用大小写的JPA查询。如何做?

Java 在WHERE子句中使用大小写的JPA查询。如何做?,java,jpa,eclipselink,Java,Jpa,Eclipselink,如何使用JPA运行下面这样的查询。(它与普通SQL一起工作) 在IS 然后(t.category为空) 可能吗?还是需要我重写这个查询?我想你不能这么做。请阅读(这里由OpenJPA提供)。以下是定义案例表达式的术语,特别是您正在使用的常规案例表达式: 事例表达式::=一般事例表达式|简单事例表达式|合并表达式| nullif表达式 常规\u case\u表达式::=case when\u子句{when\u子句}*ELSE标量\u表达式结束 when_子句::=when条件_表达式然后是标量_

如何使用JPA运行下面这样的查询。(它与普通SQL一起工作)

IS

然后(t.category为空)


可能吗?还是需要我重写这个查询?

我想你不能这么做。请阅读(这里由OpenJPA提供)。以下是定义案例表达式的术语,特别是您正在使用的常规案例表达式:

  • 事例表达式::=一般事例表达式|简单事例表达式|合并表达式| nullif表达式
  • 常规\u case\u表达式::=case when\u子句{when\u子句}*ELSE标量\u表达式结束
  • when_子句::=when条件_表达式然后是标量_表达式
右侧的表达式必须是
标量表达式
。也就是说:

  • 标量表达式::=算术表达式|字符串|主|枚举|主|日期时间|主|布尔|主|事例|表达式|实体|类型|表达式

我还没有彻底了解所有这些术语的定义,但我认为它们不包括像
(t.category为NULL)
,我担心。

您可以将where子句转换为如下内容:

where
    ((... my first condition ...) and (something is NULL))
    or
    (not (... first condition ...) and (something2 = otherthing))

您可以从以下位置下载JPA 2.0规范最终版本:

您应该在第6.5.7节中检查示例6。 它显示了当标准API中出现
时如何使用case。
我不确定,但我认为可以在
中使用逻辑表达式(
t.category为NULL
),然后如果在
WHERE
子句中使用它,则可以使用
块。

为什么不使用and和OR将条件分解为一些条件?
where
    ((... my first condition ...) and (something is NULL))
    or
    (not (... first condition ...) and (something2 = otherthing))