ORDER BY 中的 HQL 案例未正确排序

HQL case in ORDER BY not sorting correctly

我有一个 HQL,我可以选择按 "studentNumber" 或其名称来订购。

    String orderBy = orderByNumber
            ? "(case when e.studentNumber is null then e.student.name else e.studentNumber end)" : "e.student.name";

但是当我选择 studentNumber 并且它为空时,我应该按姓名排序。为此,我使用了:

   (case when e.studentNumber is null then e.student.name else e.studentNumber end)

这很好用,但是当我有超过 10 个学生时,顺序是这样的:

    1
    10
    11
    12
    2
    3
    4
    5
    6
    7
    8
    9

studentNumber 在数据库和实体中设置为 Integer。我想如果它被认为是一个字符串就会发生这种情况。

谢谢

编辑 1 我尝试了这个新查询:

    (case when (case when e.studentNumber is null then e.student.name else e.studentNumber end) = e.studentNumber then cast(e.studentNumber as int) end)

现在它可以正确排序,但是当 e.studentNumber 为 null 时,不是按名称排序。如果我添加 then 并试试这个:

    (case when (case when e.studentNumber is null then e.student.name else e.studentNumber end) = e.studentNumber then cast(e.studentNumber as int)  else e.student.name end)

第一个问题死而复生变成僵尸(1,10,2,3)...

编辑 2

我也试过合并:

   (case when coalesce(e.studentNumber, e.student.name) = e.studentNumber then cast(e.studentNumber as int) else e.student.name end)

同上,两种情况。

我认为这是一个 sql 错误。在 "Case" 中,您返回两种不同的数据类型,sql 自动转换数字类型以满足某种逻辑。 我尝试在 oracle 数据库中做一些类似的事情,但它导致了一个错误,指出返回的数据类型不同。 你应该试着改变你的要求。如果 studentNumber 不为空,也许您可​​以尝试将结果转换为数字

编辑 1: symply 使用

之类的东西怎么样
ORDER BY e.studentNumber NULLS LAST, e.student.name NULLS LAST