如果在hibernate中查询参数为null或为空,如何处理?

我正在使用JPA,hibernate 3。

String sqlQuery = " FROM TraceEntityVO where lotNumber =:lotNumber and mfrLocId=:mfrLocId and mfrDate=:mfrDate and qtyInitial=:qtyInitial and expDate=:expDate"; Query query = entityManager.createQuery(sqlQuery) .setParameter("lotNumber", traceEntityVO.getLotNumber()) .setParameter("mfrLocId", traceEntityVO.getMfrLocId()) .setParameter("mfrDate", traceEntityVO.getMfrDate()) .setParameter("qtyInitial", traceEntityVO.getQtyInitial()) .setParameter("expDate", traceEntityVO.getExpDate()); 

当没有空值或空值时,此查询就像一个魅力。 但是traceEntityVO.getLotNumber(),traceEntityVO.getMfrLocId(),traceEntityVO.getExpDate()可能有null或空值

在这种情况下,将针对变量检查值’null’或”,而不是null条件。 当我不确定参数值时,如何处理null或空?

我不想基于值(如果为空或null)动态构造查询。

这可能吗?

提前致谢..

我认为没有动态查询你真的不能这样做。

然而,使用标准API( hibernate )( JPA )来构建这样的查询很容易,您是否考虑过它?

我希望以下代码可以解决您的问题。 假设getMfrDate和getExpDate将返回Date对象,其他将返回Number或String对象。 但您可以根据返回类型修改IsEmpty。

 String sqlQuery = " FROM TraceEntityVO where lotNumber :lotNumber and mfrLocId :mfrLocId and mfrDate :mfrDate and qtyInitial :qtyInitial and expDate :expDate"; Query query = entityManager.createQuery(sqlQuery) .setParameter("lotNumber", isEmpty(traceEntityVO.getLotNumber())) .setParameter("mfrLocId", isEmpty(traceEntityVO.getMfrLocId())) .setParameter("mfrDate", isEmpty(traceEntityVO.getMfrDate())) .setParameter("qtyInitial", isEmpty(traceEntityVO.getQtyInitial())) .setParameter("expDate", isEmpty(traceEntityVO.getExpDate())); private String isEmpty(Object obj) { if(obj!=null) { if (obj instanceof java.util.Date) { return " = to_date('"+obj.toString()+"') "; } else if(obj instanceof String) { return " = '"+obj.toString()+"' "; } else if (obj instanceof Integer) { return " = "+obj.toString()+" "; } } return new String(" is null "); }