evm*_*evm 3 java sql hibernate hql
我在HSQL中使用构造"if":
String q = "SELECT id, name, " +
"IF (ABS(name) > 0, LPAD(ABS(name), 4, '0'), name) AS tord " +
"FROM table where city= " + cityId + " order by tord";
Query query = session.createSQLQuery(q);
List<Object[]> list = query.list();
session.getTransaction().commit();
session.close();
Run Code Online (Sandbox Code Playgroud)
现在我想用HQL重构这段代码.我怎样才能做到这一点?谢谢.
Vla*_*lev 10
选项1.
用CASE替换IF:
(case when ABS(name) > 0 then LPAD(ABS(name), 4, '0' else name end) AS tord
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅HQL文档
选项2.
HQL支持本机功能.如果将计算封装在自定义SQL函数中,则可以编写如下内容:
select t.*, paddNumber(t.name, 4) as tord from TableEntity t
where t.city = :city order by tord
Run Code Online (Sandbox Code Playgroud)
没有要检查的环境,但认为每个结果记录将表示为Object [].第一个元素将包含您的实体,第二个元素将包含tord.
选项3.
如果可能,重写应用程序逻辑.在保存记录之前,有不同的方法可以将所需的填充添加到字段"name".这将在排序期间删除DB中不必要的计算.
| 归档时间: |
|
| 查看次数: |
11004 次 |
| 最近记录: |