I have a join reference like following for which the first join expression is constructed by the JPA API automatically.
CriteriaBuilder cb = entityManager.ge
And Hibernate's Criteria API version 3.6 supports it too:
Criteria c = session.createCriteria(Tuple.class);
c.createAlias("demands", "d")
.createAlias("d.metadata", "m",
Criteria.LEFT_JOIN, Restrictions.eq("m.type", "AFFECTATION_KEY"));
Or you may want Restrictions.eqProperty() for that last bit. Note the under-appreciated version of createAlias() with the fourth parameter. Here is a quote from the documentation
Parameters:
Hibernate API 3.6