2012-06-12 70 views
1

我有搜索屏幕有10個領域,並涉及大約5到6表得到結果。我正在編寫一個自定義的SQL查詢,並且只在存在值時追加where條件。休眠自定義查詢搜索屏幕

有人可以請建議這是正確的方法或任何其他更好的方法。

我無法爲我的情況使用任何插件或其他API。

StringBuffer sqlQuery = new StringBuffer(); 
sqlQuery.append (" select member.* from member, customer, case where customer.status='A'); 
if(firstName != null) 
sqlQuery.append("customer.firstName= :firstName"); 

if(caseid != null) 
sqlQuery.append("case.caseid =:caseid"); 

SQLQuery queryObj = createSQLquery(sqlQuery.toString()); 
queryObj.list(); 

其中作爲構件,客戶,殼體是實際的表。

UPDATE

當我加入where條件字符串緩衝區

if(caseid != null) 
sqlQuery.append(" and case.caseid =:caseid"); 

and when queryObj is formed I am doing it as 
if(caseid != null) 
queryObj.setString("caseid", caseid); 

is there better way to add after queryObj (to combine both)? 

在此先感謝。

回答

2

不,這不一定是正確的做法。在使用Hibernate時,SQL不是選擇的查詢語言。如果可能,應首選HQL。而且Hibernate也有the Criteria API,它的設計正是爲了構建動態查詢。

+0

使用標準,因爲我告訴我有超過5個表我不知道如何參考對方。如果我提到,其中一些是一對多,多對一,多對多。我有點用HQL,再次編輯這個問題,請檢查並讓我知道。謝謝 – changeme

+0

http://docs.jboss.org/hibernate/core/3.6/reference/zh-CN/html_single/#querycriteria-associations。除了鏈接到文檔之外,我無能爲力。嘗試閱讀,理解並嘗試。你將無法在3分鐘內成爲標準嚮導。如果您遇到困難,請發佈一個問題,準確解釋您正在嘗試執行的操作,並參與相關代碼和相關實體的映射。 –

+0

你能看到更新一次,並幫助我多一點? – changeme