есть ли способ преобразовать этот запрос Oracle в запрос критериев.
SELECT * FROM T_MERCHANT_ORDER_DETAILS where MERCHANT_ID = in_merchantId and ORDER_ID= nvl(in_orderId,ORER_ID) and
TRANSACTION_ID=nvl(in_txnId,TRANSACTION_ID);
in_merchantId и in_orderId - это переменные, переданные в процедуру оракула. могу я сделать это в спящем режиме.
ПРИМЕЧАНИЕ ::: он возвращает набор результатов на основе merchantId, если orderId и txnId равны нулю, или merchantId и orderId, если только txnId имеет значение null, и на всех трех, если никто не является нулевым.
Заранее спасибо.




Я сделал это, чтобы все заработало.
if (orderId==null && transactionId ==null) {
criteria.select(root).where(builder.equal(root.get("merchantId"),merchantId));
}
else if (transactionId==null && orderId!=null) {
criteria.select(root).where(builder.equal(root.get("merchantId"),merchantId),builder.equal(root.get("orderId"),orderId));
}
else {
criteria.select(root).where(builder.equal(root.get("merchantId"),merchantId),builder.equal(root.get("transactionId"),transactionId));
}
но я думаю, что это можно сделать с помощью более качественного кода.
Почему нет? Просто опустите предикаты, если orderId / tx имеет значение null, и добавьте их в противном случае ... таким образом, nvl-функциональность перемещается в java-код, но я не вижу проблемы с этим в вашем примере