为了账号安全,请及时绑定邮箱和手机立即绑定

JPA 标准构建器:如何按顺序替换字符串并将其转换为数字?

JPA 标准构建器:如何按顺序替换字符串并将其转换为数字?

HUH函数 2021-08-19 16:36:08
有人可以建议我如何使用 JPA Criteria builder API 构建以下查询吗?SELECT id, name, date, version FROM public.upgradeTableorder by (CAST(replace(version, '.', '')AS numeric)) desc;请注意我们的版本列有像“11.0.2.213”、“11.0.2.73”这样的值我们需要修剪字符“.” 在版本中,然后将它们转换为数字,然后按 desc 排序。
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

目前 JPA 没有用于 replace() 和 cast(string as numeric) 的 API。但是,如果数据库可移植性不重要,您可以使用 CriteriaBuilder.function(...) 来创建数据库本机函数。


对于 MySQL,您的示例的 order-by 表达式将是:


    Expression<String> replacedValue = criteriaBuilder.function("replace", 

            String.class, root.get("version"), criteriaBuilder.literal("."), 

            criteriaBuilder.literal(""));


    Expression<String> lpadValue = criteriaBuilder.function("lpad", 

            String.class, replacedValue, criteriaBuilder.literal(20),

            criteriaBuilder.literal("0"));


    criteriaQuery.orderBy(criteriaBuilder.desc(lpadValue));

CriteriaBuilder.function(...) 不支持诸如cast(value as type) or convert(value, type). 所以使用 lpad(...) 来实现相同的 orderBy 结果。


它适用于Cmobilecom JPA,这是一个适用于 Java 和 Android 的轻量级 JPA实现。



查看完整回答
反对 回复 2021-08-19
  • 1 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信