Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
参数为nullable属性的JPA命名查询where子句中的MySQL条件_Mysql_Sql_Jpa - Fatal编程技术网

参数为nullable属性的JPA命名查询where子句中的MySQL条件

参数为nullable属性的JPA命名查询where子句中的MySQL条件,mysql,sql,jpa,Mysql,Sql,Jpa,如果作为参数传递的某些属性可为null,那么如何在MySQL 5.1数据库的JPA命名查询的where子句中指定条件 示例:该表包含可为空的属性_1和不可为空的属性_2。内容包括: id attribute_1 attribute_2 -- ----------- ----------- 1 {null} 123 2 X 456 id属性_1属性_2 -- -----------

如果作为参数传递的某些属性可为null,那么如何在MySQL 5.1数据库的JPA命名查询的where子句中指定条件

示例:该表包含可为空的属性_1和不可为空的属性_2。内容包括:

id attribute_1 attribute_2 -- ----------- ----------- 1 {null} 123 2 X 456 id属性_1属性_2 -- ----------- ----------- 1{null}123 2x456 如果:param_1=null且:param_2=“123”,则查询结果应为记录1

如果:param_1=“X”和:param_2=“456”,则查询结果应为记录2

如果例如:param_1=“X”和:param_2=“123”,则查询应该没有结果


谢谢

对于第一行,您需要更改查询中的where子句:

where attribute_1 is null

相反,使用
=
将不会产生任何行,因为
a=null
始终是
null

我使用本机查询解决了这个问题。我无法让它与JP-QL查询一起工作。 我使用了这个条件

AND IF(?1 IS NULL, b.attribute_1 IS NULL, b.attribute_1 = ?1)

在where子句中(?1是参数的占位符)。

没有那么简单。例如,在命名查询中,where子句可能类似于
where table.attribute_1=:param_1和table.attribute_2=:param_2
。问题是:param_1可能是Java空值。是的,我也这么认为。但你没有办法这么做。如果
:param_1
为空,则pass
属性_1为空
,否则
属性_1=:param_1
。不同的说法。您可以在
:param_1
上加上一个条件组合/或两者,但这样做会损害您的查询计划(如果语句已准备好)。我不确定是否理解您的意思。无法传递像
属性_1为null这样的字符串。id并不能解决这个问题,因为查询不能以
attribute_1为null
并且
attribute_1=param_1
可以正确填写的方式表示。我用另一种方法解决了这个问题,请参见下一个答案。我想说的是,尽管不可能更改它,但您的操作方式(即当
var1
为空时发送
attr1=var1
)不能也不会返回行。曾经或者根据最初建议的属性值有条件地发送查询。或者使用
where(attr1=var1或var1为null)
来代替后面的建议——但要注意,后者不能也不会在
attr1
上使用任何适用的索引(如果准备好的话)。您的语句“[…]您的操作方式[…]不能也不会返回行”让我感到困惑。我没有在问题或这些评论中陈述我的问题的解决方案。。。(我在下面自己的回答中说明了解决方案/解决方法)。无论如何,谢谢你的努力。