将Oracle NVl Query转换为Criteria Query

有没有办法将此Oracle Query转换为Criteria Query .

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是传递给oracle过程的变量 . 我可以在Hibernate中这样做吗?

注:::如果orderId和txnId为null,则返回基于merchantId的结果集;如果只有txnId为null,则返回merchantId和orderId;如果没有,则返回所有三个结果集 .

提前致谢 .

回答(1)

2 years ago

我这样做是为了让它发挥作用 .

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

但我认为可以用更好的代码来完成 .