2014-04-01 115 views
-1

在我的應用程序中,我有類別ids的列表。現在我想從基於產品類別的數據庫中獲取產品,該產品類別將包含在該列表中,還有產品名稱,如「XYZ」。How How可以通過使用IN子句來實現這一點。 是任何人有任何想法,我通過傳遞方式試過,但我得到空單將對象[]傳遞給sql查詢

我的代碼是:

Object[] cids=final_cats.toArray(); 
String cds=final_cats.toString(); 
String query="select fpd from FTextProductDetails ftpd inner join ftpd.fProductDetails fpd WHERE fpd.categoryId in("+cds+")and ftpd.productName like ?" ; 
Object[] values=new Object[]{'%'+productName+'%'}; 
List<Object[]> list=HibernatePaginationImpl.findProductsByName(query, values,pageSizeLimit , pageNumber,this.baseDao); 

這裏final_cats擁有的所有類別。

+0

既然你似乎是使用Hibernate,你可以使用Hibernate條件查詢(http://docs.jboss.org/hibernate/orm/3.3/reference/en/ html/querycriteria.html)並使用'Restrictions.in'(http://docs.jboss.org/hibernate/orm/3.3/api/org/hibernate/criterion/Restrictions.html) –

+0

謝謝Mr.David.Here我編寫定製的類HibernatePaginationImpl,它將具有接受查詢的靜態方法,所以我需要傳遞查詢並限制使用條件。 – user3354457

+0

好的,如果你需要SQL,你可以建立'PreparedStatement'出來,那麼你真的需要在你的SQL中有大量'''標記。由於CuE已經給你一個使用該技術的答案,所以我不打擾。我希望你能做到這一點。祝你好運。 –

回答

0

我解決我的問題。

下面的代碼:

Object[] cids=final_cats.toArray(); 
String cds=""; 
for(Object o:cids) { 

     cds=cds+o+","; 
} 

cds=cds.substring(0, cds.length()-1); 

String query="select fpd from FTextProductDetails ftpd inner join ftpd.fProductDetails fpd WHERE fpd.categoryId in("+cds+")and ftpd.productName like ?" ; 
Object[] values=new Object[]{'%'+productName+'%'}; 
List<Object[]> list = HibernatePaginationImpl.findProductsByName(query, values,pageSizeLimit , pageNumber,this.baseDao); 
+0

你知道嗎if(cds == null && cds.isEmpty())'永遠不會是真的嗎?事實上,如果你沒有使用Apache Commons,那麼前十行可以寫成只有一行 - 'String cds = StringUtils.join(final_cats,',');'我發現它更具可讀性。我希望這有些用處。 –

1

讓我們final_cats是一個列表

int locSize = final_cats.size(); 
StringBuilder builder = new StringBuilder(); 
Object[] args = new Object[locSize];    
for(int i = 0; i < locSize; i++) { 
     builder.append(" ?, "); 
     args[i]= final_cats.get(i); 
} 
.... 
String queryString = StringUtils.substringBeforeLast(builder.toString(), ",");  
String query="select fpd from FTextProductDetails ftpd inner join ftpd.fProductDetails fpd WHERE fpd.categoryId in("+ builder.toString() +")and ftpd.productName like ?" ; 

希望這有助於邏輯..