Java JPA with Play Framework对空值的查询不起作用

Java JPA with Play Framework对空值的查询不起作用,java,playframework,jpa-2.0,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()

有人能解释一下为什么会这样:

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是的,这是可能的,但不是那样。它不起作用,因为您的尝试归结为Version=null..,但您需要Version为null。你必须这样做:

Dependency D = Dependency.find(
"name = ? and version is null and release is null", "test").first();

另一种可能是编写整个JP QL。

我不明白为什么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();
显然,这要详细一点,但它可读性很强,并且清楚地表明您期望参数有时可能为null