gpt4 book ai didi

java - JPA 条件生成器 : how to replace and cast a string to numeric in order-by?

转载 作者:行者123 更新时间:2023-11-30 10:12:04 28 4
gpt4 key购买 nike

有人可以建议我如何使用 JPA Criteria builder API 构建以下查询吗?

SELECT id, name, date, version FROM public.upgradeTable
order by (CAST(replace(version, '.', '')AS numeric)) desc;

请注意我们的版本列有像“11.0.2.213”、“11.0.2.73”这样的值我们需要修剪字符 '.'在版本中,然后将它们转换为数字,然后按 desc 排序。

最佳答案

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

对于 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) 或 convert(value, type) 这样的原生函数。所以使用 lpad(...) 来实现相同的 orderBy 结果。

它与 Cmobilecom JPA 配合得很好,适用于 Java 和 Android 的轻量级 JPA 实现。

免责声明:我是 Cmobilecom JPA 的开发人员。

关于java - JPA 条件生成器 : how to replace and cast a string to numeric in order-by?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52069928/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com