2013-08-27 67 views
0
StringBuilder query = new StringBuilder("from country "); 
query.append("and stateId in (:stateId)"); 
hqlNamedParam.addParamAndValue("stateId", values); 

這裏如果「值」不存在於表中,則獲取所有行。在HqlNamedParams中,如果條件不產生結果提取所有行

我該怎麼做?

+0

OP,可以請你闡述這一_「如果‘值’犯規存在於表,獲取所有行」 _你這是什麼這是什麼意思? – bpgergo

+0

@bpgergo在這裏,我必須做的最好的匹配,如果價值有沒有考慮他們其他明智我必須與我擁有任何生活!請寫下我錯誤的語法! –

+0

@ Raghu Chandra:嗨,看我更新的回答 –

回答

0

我誤解了這個問題,現在我編輯我的答案:

你必須運行兩個查詢。

// The first: 

StringBuilder query = new StringBuilder("from country "); 
query.append("and stateId in (:stateId)"); 
hqlNamedParam.addParamAndValue("stateId", values); 

// The second (only if the first doesn't return rows) 

if (outList == null || outList.size == 0) { 
    StringBuilder query2 = new StringBuilder("from country "); 
} 

或者(但您使用更個性化的子查詢)

StringBuilder query = new StringBuilder("from country "); 
query.append(" where 
    (select count(c2.id) from country c2 where c2.stateid in (:stateId)) > 0 
    and cs.stateid in (:stateId) 
    or (select count(c3.id) from country c3 where c3.stateid in (:stateId)) = 0"); 
hqlNamedParam.addParamAndValue("stateId", values); 
+0

恐怕你誤解了OP。它說「如果」值「不存在於表中,取所有行」。我將其解釋爲「如果原始查詢不返回任何內容,因爲給定的stateid沒有出現在國家/地區表中,則再次運行查詢,而不使用stateid where子句」 – bpgergo

+0

感謝您的回覆,我的擔憂是我仍然應該去搜索數據庫,如果他們不在數據庫中,我必須考慮所有其他數據庫。 –

+0

@bpgergo:嗯,是的,我誤解了OP。現在我試着回答我的答案。謝謝 –