gpt4 book ai didi

java - 使用 Grails 在 HQL 中按 ID 的子字符串作为整数排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:09 24 4
gpt4 key购买 nike

有没有一种方法可以使用 HQL 或/和 Criteria 将 ID 的子字符串转换为整数来排序?

例如:

class Foo {
String id
String name
}

排序后的数据集看起来像:

90-1  David
90-4 Mike
101-1 Jack
101-2 Peter
105-1 Jon
105-7 Jane

使用 MySQL 数据库和 native sql 可以像这样完成:

order by 
CAST(substring_index(id, '-', 1) AS UNSIGNED),
CAST(substring(id, length(substring_index(id, '-', 1)) + 2) AS UNSIGNED)

我尝试按照建议使用公式,但这没有用,因为 UNSIGNED 被视为别名并且生成的 SQL 有 _this.UNSIGNED

Integer fooFirstID
Integer fooSecondID

static mapping = {
fooFirstID formula: "CAST(substring_index(id, '-', 1) AS UNSIGNED)"
fooSecondID formula: "CAST(substring(id, length(substring_index(id, '-', 1))
+ 2) AS UNSIGNED)"
}

我看到 Hibernate 支持子字符串以及转换为 Hibernate 类型,但找不到等效的 substring_index。

谢谢。

最佳答案

您可以在带注释的属性上使用@Formula 注释和顺序,它工作正常。

@Formula("CAST(substring_index(id, '-', 1) AS UNSIGNED)")
public varType getToto() {
return toto;
}

@Formula("CAST(substring(id, length(substring_index(id, '-', 1)) + 2) AS UNSIGNED)")
public varType getTata() {
return tata;
}

然后在 HQL 中执行:按 toto、tata 排序

顺便说一句,您可以考虑使用复合 ID。

关于java - 使用 Grails 在 HQL 中按 ID 的子字符串作为整数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9522758/

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