在我的应用程序中,我有类别ID的列表。现在我想根据产品类别从数据库中获取产品,该产品类别将包含在该列表中,产品名称也可以像“XYZ”一样。如何通过使用IN子句实现此目的。 有没有人有任何想法我通过传递方式尝试这个,但我得到空列表
我的代码是:
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 :(得分:1)
让我们把final_cats作为List
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 ?" ;
希望这个逻辑有帮助..
答案 1 :(得分: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);