2012-02-16 56 views
2

空值播放框架查詢有人能解釋我這是爲什麼工作:JPA與不工作

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,劉若英

回答

0

是的,這是可能的,但不是這樣的。它不起作用,因爲你的嘗試歸結爲Version = null ..,但是你需要版本爲null。你必須去這樣的事情:

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

另一種可能性是寫整個JP QL。

1

我不明白爲什麼JPA不能簡單地照顧這個。我分享你的失望!

對於它的價值,我發現以下解決方案的作品。無論您的參數可以是空(和你希望查詢返回在此列空的記錄),使用此語法:

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(); 

顯然,這是更詳細的不少,但它是相當可讀清楚地表明您期望參數有時可能爲空。