JPA查询参数IN或IS NULL

时间:2020-04-07 08:18:26

标签: sql jpa

这个简单的查询有一个问题:

except KeyError

在列表中查询哪个,或者,如果未提及ID,则选择表中的所有猫(idCat实际上是可选的)。 当它是一个“ =”运算符而不是IN时,它似乎起作用了,但是当我运行查询时,我收到了错误消息:“无效的关系运算符”。 即使我尝试使用本机查询。 我尝试将idCat值替换为单个值(它起作用),或者替换为null(它也起作用),但是当我放置多个值时不这样做。

语法是否有些错误,或者使用IN语句根本不可能吗?

1 个答案:

答案 0 :(得分:0)

提供填充列表时,查询的第二部分( OR:idCat IS NULL )将转换为值列表,以与“ IS NULL ”进行比较“。

JSR-338的第4.6.11章所述,“ [a]空比较表达式测试单值路径表达式或输入参数是否为NULL值”,因此,不应将填充列表用作参数。要检查列表,有一个“ IS [NOT] EMPTY ”表达式,但是它需要一个 collection_valued_pa​​th_expression ,而不是您的情况。

有时我会迷惑一些持久性提供程序的奇怪行为,如果您用括号将参数括起来,它们会支持(反规范)这种比较,但是同样,您不能依靠它进行将来的开发。 / p>

在您的情况下,最好的方法是定义两种不同的JPQL或方法来处理两种所需的情况。