Suppose you want to find a Cat that have kittens named Foo and Bar. You would want to try the following criteria:
Crtieria c = sess.createCriteria(Cat.class);
c.createCriteria("kittens", "first")
.add( Expression.eq("name", "Foo");
c.createCriteria("kittens", "second")
.add( Expression.eq("name", "Bar");
c.list();
You would expect that the following query would create multiple joins. However while it creates multiple WHERE conditions for proper aliases, it doesn't create multiple joins, i.e. it only creates join for the first createCriteria.
This is expected functionality, Criteria API does not support multiple joins to same association.