Then you shouldn't be using one-to-one. Change that to many-to-one unique="true", which means "one-to-zero-or-one".
Now that I understand that, to do the outer join, use something like this:
Code:
Criteria crit = session.createCriteria(Parent.class).
.setFetchMode( "child", FetchMode.JOIN )
.createCriteria("child")
.addOrder(Order.desc( "prop" ));
return crit.list();
In this code, the Criteria object that addOrder is called on is the once created by createCriteria("child"). I believe that doing it this way (rather than with createAlias) uses outer joining. You may even be able to drop the setFetchMode call, I'm not sure.
You may have to use createCriteria("child", "ch").addOrder(Order.desc("ch.prop")), but I don't think so.