2012-07-10 11 views
7

Sto utilizzando JPA, hibernate 3.Come gestire se il parametro query è nullo o vuoto in sospensione?

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

Questa query funziona come un fascino in cui il non c'erano valori vuoti o nulli. Ma potrebbe essere possibile il valore nullo o vuoto per traceEntityVO.getLotNumber(), traceEntityVO.getMfrLocId(), traceEntityVO.getExpDate().

In questo caso il valore 'nullo' o '' viene confrontato con la variabile anziché è nullo condizione. Come posso gestire quando non sono sicuro del valore del parametro, nullo o vuoto?

Non voglio costruire la query in modo dinamico in base ai valori se vuoto o nullo.

È possibile?

Grazie in anticipo ..

risposta

2

penso che davvero non si può farlo senza una query dinamica.

La creazione di una query di questo tipo è tuttavia semplice con i criteri API (hibernate) (JPA), l'avete presa in considerazione?

+0

Ho risolto con query dinamica. Ho costruito una query basata sulle condizioni e passato la query costruita al gestore di entità. Funziona .. Grazie. – Prathap

1

Spero che il seguente codice risolva il problema. Supponendo getMfrDate e getExpDate restituiranno l'oggetto Date e altri oggetti Number o String. Ma puoi modificare IsEmpty in base ai tipi restituiti.

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 "); 
} 
Problemi correlati