2012-07-10 49 views
7

我使用JPA,休眠3如果查詢參數在Hibernate中爲空或空,該如何處理?

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()。

在這種情況下,值「零」或「」抵靠變量代替檢查爲空條件。如果我不確定參數值是空還是空,我該如何處理?

我不想根據值動態構建查詢,如果爲空或空。

這可能嗎?

在此先感謝..

回答

2

我覺得你真的不能做,沒有一個動態查詢。

然而,使用標準API(hibernate)(JPA)構建這樣的查詢很容易,您是否認爲它?

+0

我固定的動態查詢。我根據條件構造查詢並將構造的查詢傳遞給實體管理器。它的工作..謝謝。 – Prathap 2013-07-16 05:20:05

1

我希望以下代碼可以排序您的問題。假設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 "); 
} 
相關問題