Here is my Criteria based multi join query. It works fine, except that I would like it to return only the mail instances and not the admin ones. I guess I need some projections to do that...
Code:
public List<Mail> findLikePattern(String pattern) {
pattern = "%" + pattern + "%";
Criterion description = Restrictions.ilike("description", pattern);
Criterion subject = Restrictions.ilike("subject", pattern);
Criterion body = Restrictions.ilike("body", pattern);
Criterion firstname = Restrictions.ilike("a.firstname", pattern);
Criterion lastname = Restrictions.ilike("a.lastname", pattern);
Criterion login = Restrictions.ilike("a.login", pattern);
Criterion email = Restrictions.ilike("a.email", pattern);
Criterion name = Restrictions.ilike("c.name", pattern);
Disjunction disjunction = Restrictions.disjunction();
disjunction.add(description).add(subject).add(body).add(firstname).add(lastname).add(login).add(email).add(name);
Criteria criteria = getSession().createCriteria(Mail.class);
criteria.add(disjunction).addOrder(Order.asc("subject")).createAlias("admin", "a", Criteria.LEFT_JOIN).createAlias("mailCategory", "c", Criteria.LEFT_JOIN);
return criteria.list();
}