Restrizioni dei criteri di ibernazione E / O combinazione

Come potrei ottenere ciò usando le restrizioni di ibernazione?

(((A='X') and (B in('X',Y))) or ((A='Y') and (B='Z'))) 

pensa funziona

 Criteria criteria = getSession().createCriteria(clazz); Criterion rest1= Restrictions.and(Restrictions.eq(A, "X"), Restrictions.in("B", Arrays.asList("X",Y))); Criterion rest2= Restrictions.and(Restrictions.eq(A, "Y"), Restrictions.eq(B, "Z")); criteria.add(Restrictions.or(rest1, rest2));