I have an HQL that I can choose to order by "studentNumber" or its name.
String orderBy = orderByNumber
? "(case when e.studentNumber is null then e.student.name else e.studentNumber end)" : "e.student.name";
But when if I choose studentNumber, and it is null, I should order by name. For that I used:
(case when e.studentNumber is null then e.student.name else e.studentNumber end)
This works fine, but when I have more than 10 students the order comes like this:
1
10
11
12
2
3
4
5
6
7
8
9
studentNumber
is set as Integer in the database and entity. I guess this would happen if it was considered a string.
thank you
EDIT 1 I tried this new query:
(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)
now it orders correctly, but when e.studentNumber is null, is not ordering by name. If I add the then and try this:
(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)
The first problem comes back from the dead as a zombi (1, 10, 2, 3)...
EDIT 2
I also tried with coalesce:
(case when coalesce(e.studentNumber, e.student.name) = e.studentNumber then cast(e.studentNumber as int) else e.student.name end)
Same as above, in both cases.