有人可以解释一下为什么这样做有效:
Dependency d = new Dependency();
d.name = "test";
d.release = "";
d.version = "";
d.save();
Dependency D = Dependency.find("byNameAndVersionAndRelease", "test", "", "").first();
assertNotNull(D);
这不是:
Dependency d = new Dependency();
d.name = "test";
d.release = null;
d.version = null;
d.save();
Dependency D = Dependency.find("byNameAndVersionAndRelease", "test", null, null).first();
assertNotNull(D);
是否无法查询null
值?
BR,Rene
答案 0 :(得分:1)
我不明白为什么JPA不能简单地处理这个问题。我分享你的沮丧!
对于它的价值,我发现以下解决方案有效。如果您的参数可能为null(并且您希望查询返回该列中包含null的记录),请使用以下语法:
String name = "test";
String version = null;
String release = null;
Dependency D = Dependency
.find("name = :name "
+ "and (version = :version or (version is null and :version is null)) "
+ "and (release = :release or (release is null and :release is null)) ")
.setParameter("name", name)
.setParameter("version", version)
.setParameter("release", release)
.first();
显然,这是相当冗长的,但是它非常易读并清楚地表明您希望参数有时可能为空。
答案 1 :(得分:0)
是的,这是可能的,但不是那样。它不起作用,因为您的尝试归结为 Version = null .. ,但您需要版本为null 。你必须得到这样的东西:
Dependency D = Dependency.find(
"name = ? and version is null and release is null", "test").first();
其他可能性是编写整个JP QL。