public class X { private String foo; } @Inheritance(strategy=InheritanceType.JOINED) public class A { private X myX; } public class B extends A { } public class C extends A { private B myB; } Criteria crit = session.createCriteria(C.class); // what alias do I need to create here? crit.addOrder(Order.asc("myB.myX.foo"))