JPA与Play Framework查询空值无效

时间:2012-02-16 17:32:40

标签: java playframework jpa-2.0

有人可以解释一下为什么这样做有效:

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

2 个答案:

答案 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。