avoid setParameter for "order by" in JPQL

you might want to create a JPQL like this:

String sql = "select distinct s from Student s order by :orderByColumn asc"
Query query = em.createQuery(sql);
query.setParameter("orderByColumn", "name");
return query.getResultList();

 However, the "order by" parameter might not be set properly with some implementations, especially with the "distinct" keyword in the select clause.

 

So generally you would have two solutions for this:

1. use dynamic jpql, based on passed sorting requirement, for "order by"

String sql = "select distinct s from Student s";
if(sortByName) {
  sql += " order by s.name asc";
}
else if(sortByMob) {
  sql += " order by s.mobile asc";
}
Query query = em.createQuery(sql);
//query.setParameter("orderByColumn", "name");
return query.getResultList();

 

2. sorting the returned list in your application, rather than in the query.

 

One last thing to mention: The "asc/desc" cannot be set as parameters (not tested though)

 

hope this can save you a few hours ... (-;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值