1 回答
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实现。
添加回答
举报