我正在创建自定义JPQL查询以获取一些数据。 在某些情况下,我想根据参数值是否为非null添加一个where子句。
例如等效的sql查询:
//If parameter status is not null.
SELECT sum(A.sal) FROM TABLE A WHERE A.STATUS = 'X' GROUP BY A.CURRENCY;
//else
SELECT sum(A.sal) FROM TABLE A GROUP BY A.CURRENCY;
有人可以帮我吗?
答案 0 :(得分:0)
两个查询:
//If parameter status is not null.
SELECT sum(A.sal) FROM TABLE A WHERE A.STATUS = 'X' GROUP BY A.CURRENCY;
//else
SELECT sum(A.sal) FROM TABLE A GROUP BY A.CURRENCY;
可以压缩为一个。
首先让我们声明一个命名参数statusParam
。该参数可以采用任何值(例如上方的'X'
或null
)。因此,上面的两个查询可以重写为:
SELECT sum(A.sal) FROM A WHERE (A.STATUS = :statusParam OR :statusParam is null ) GROUP BY A.CURRENCY;
答案 1 :(得分:0)
来吧,JPQL只是正常的String :) 您想要这样的东西吗?
private String generateHql(String status) {
String jpql = "SELECT sum(A.sal) FROM TABLE A ";
if (null != status) {
jpql += "WHERE A.STATUS = " +status ;
}
jpql += " GROUP BY A.CURRENCY "
return jpql;
}