Java 忽略hibernate本机查询中的空列表

Java 忽略hibernate本机查询中的空列表,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个问题 String query = "Select * from brand brd join product prd on brd.prd_id = prd.id join price prc on prc.id = prd.prc_id"; if(!bo.brd.isEmpty() || !bo.prd.isEmpty()) query.append(" wh

我有一个问题

 String query = "Select * 
                   from brand brd 
                   join product prd on brd.prd_id = prd.id
                   join price prc on prc.id = prd.prc_id";

 if(!bo.brd.isEmpty() || !bo.prd.isEmpty())
 query.append(" where " );
 if(!bo.brd.isEmpty()) && !bo.prd.isEmpty())
 query.append(brd.id in (:brdId) and prd.id in (:prdId));
 else if(!bo.brd.isEmpty())
 query.append(brd.id in (:brdId)) ;
 else if(!bo.prd.isEmpty())
 query.append( prd.id in (:prdId));

 query.createNativeQuery(query)
 .setParameterList("brdId", brdLst)
 .setParameterList("prdId", prdLst)
 .getResultList();

所有参数都是可选的。我使用hibernate原生查询,并使用setParameterlist设置所有参数。当列表为空或无法找到要获取的参数时,br未找到或pr未找到。如何动态更改查询参数?

整个过程如下所示

String query = "Select * 
               from brand brd 
               join product prd on brd.prd_id = prd.id
               join price prc on prc.id = prd.prc_id";
if(!bo.brd.isEmpty() || !bo.prd.isEmpty())
  query.append(" where " );
if(!bo.brd.isEmpty()) && !bo.prd.isEmpty())
  query.append(brd.id in (:brdId) and prd.id in (:prdId));
else if(!bo.brd.isEmpty())
  query.append(brd.id in (:brdId)) ;
else if(!bo.prd.isEmpty())
   query.append( prd.id in (:prdId));

if(!bo.brd.isEmpty()) && !bo.prd.isEmpty())
  query.createNativeQuery(query).setParameterList("brdId",brdLst).setParameterList("prdId", prdLst);
else if(!bo.brd.isEmpty())
  query.createNativeQuery(query).setParameterList("brdId", brdLst)
else if(!bo.prd.isEmpty())
  query.createNativeQuery(query).setParameterList("prdId", prdLst)

是的,“查询”是字符串,它不会有hibernate方法。

如果有其他条件的话,有些真的会搞砸。我从问题中了解到,您希望根据可用性将brandList和productList添加为参数。对吧?一开始它不会编译。声明为字符串的变量
query
没有hibernate方法。。。尝试调试您的代码,因为两个
if
语句中几乎没有错误,稍后尝试
setParameterList
时不要立即调用下一个方法,使用相同的
if-else
条件来设置propper参数,例如在next if-else中使用
q.creaatenativequaly
,调用required
q.setParameterList
此外,第一个
if
可能应该是'if(!bo.brd.isEmpty()| |!bo.prd.isEmpty())'和第二个
if(!bo.brd.isEmpty())&&!bo.prd.isEmpty())
-两者中的第二个条件都缺少
谢谢@Mohd,因为我们只有2个参数,它很容易放入循环中,但是当我开始添加参数时,没有任何组合会像N!时代。我期待一些动态设置的东西parameters@Vivek您正在动态修改查询,并期望hibernate自动识别where子句中可用的条件,然后相应地设置参数。这种想法在理论上是不正确的。也许,在这种情况下,您可以使用条件查询,您只需要根据可用的参数列表添加特定的限制。