Преобразование запроса Oracle NVl в запрос критериев

есть ли способ преобразовать этот запрос 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, и на всех трех, если никто не является нулевым.

Заранее спасибо.

Почему нет? Просто опустите предикаты, если orderId / tx имеет значение null, и добавьте их в противном случае ... таким образом, nvl-функциональность перемещается в java-код, но я не вижу проблемы с этим в вашем примере

tom 10.12.2018 16:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
292
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я сделал это, чтобы все заработало.

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

но я думаю, что это можно сделать с помощью более качественного кода.

Другие вопросы по теме