将Oracle NVl QUery转换为条件查询

时间:2018-12-10 11:56:31

标签: java spring oracle hibernate

有什么方法可以将此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是传递给oracle过程的变量。 我可以在Hibernate中做到这一点吗?

注意:::如果orderId和txnId为null,则返回基于商人ID的结果集,         或如果只有txnId为null,则为商人ID和订单ID,         如果没有人为空,则对这三个都进行

谢谢。

1 个答案:

答案 0 :(得分:0)

我这样做是为了使其正常工作。

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

但是我认为可以使用更好的代码来完成。