如果查询参数在Hibernate中为空或空的时候如何处理?
我正在使用JPA,休眠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条件。 如果我不确定参数值是空还是空,我该如何处理?
我不想基于值动态构建查询,如果为空或空。
这可能吗?
提前致谢..
如果没有动态查询,我认为你确实无法做到这一点。
然而,使用标准API(hibernate)(JPA)构建这样的查询很容易,您是否认为它?
我希望下面的代码可以排序你的问题。 假设getMfrDate和getExpDate将返回Date对象和其他数字或字符串对象。 但是你可以根据返回类型修改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 ");
}
链接地址: http://www.djcxy.com/p/10949.html
上一篇: How to handle if query parameter is null or empty in hibernate?