2012-07-10 7 views
7

私は空またはnull値が存在しない場合は、このクエリは魔法のように動作3.hibernateでクエリパラメータがnullまたは空の場合の処理​​方法

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

を休止状態、JPAを使用しています。しかし、にnullまたは空の値がある可能性があります。traceEntityVO.getLotNumber()、traceEntityVO.getMfrLocId()、traceEntityVO.getExpDate()値は「NULL 'または」代わりの変数に対してチェックされる。この場合

条件ヌルです。 nullまたは空のパラメータ値がわからないときはどうすれば処理できますか?

空またはnullの場合、値に基づいて動的にクエリを構築したくありません。

これは可能ですか?

ありがとうございます。

答えて

2

私はあなたが本当に動的クエリなしでそれを行うことはできないと思います。

このようなクエリの作成は、条件API(hibernate)(JPA)で簡単ですが、それを考慮しましたか?

+0

動的クエリで修正されました。条件に基づいてクエリを作成し、作成したクエリをエンティティマネージャに渡しました。それは動作します..ありがとう。 – Prathap

1

次のコードが問題を解決することを願っています。 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 "); 
} 
関連する問題