I have the following problem. I have three classes, A, B and C. A contains a OneToMany relationed list of B:s. B contains a ManyToOne relation to C. C contains a field calle
ChssPly76 is right.
What you could do is to create a named query like this one:
SELECT b
FROM B b
WHERE b.a = :mya
ORDER BY b.c.name
Have you tried @OrderBy("c.name", "name")
?
You shouldn't use "b." because it's implied that the @OrderBy will be done on columns of the instances of B on the b array.
It's NOT possible. @OrderBy only accepts direct property / field names, not nested properties. Which makes sense, really, because "c" table - depending on your fetching strategy may not even be part of a select issued to retrieve your "b"s.
It is not possible in javax.persistence.OrderBy (as say ChssPly76 ), but when I was using Hibernate I construct new column in PLAIN SQL with Formula() annotation and then OrderBy over it:
class A {
@OneToMany
@OrderBy("orderCol") <---- reference to virtual column
List<B> b;
}
class B {
@ManyToOne
C c;
String name;
@org.hibernate.annotations.Formula(
"( select C_table.name as orderCol from C_table where C_table.id = id )"
) <------------------------------------------ join with plain SQL statment
String orderCol;
}
May be EclipseLink has same possibilities?
Have you tried:
@OrderBy("c.name ASC", "name ASC")
?