DetachedCriteria q = DetachedCriteria.forClass(Element.class, "pve_"+key).
add(Restrictions.eqProperty("pve_"+key+".id", "e.id")).
setProjection(org.hibernate.criterion.Property.forName("pve_"+key+".id"));
DetachedCriteria propCriteria = q.createCriteria("properties");
propCriteria.createCriteria("type").add(Restrictions.eq("name", key));
DetachedCriteria pvlCriteria = propCriteria.createCriteria("valuelist").
add(Restrictions.eq("nextRevision",Modification.MaxRevision)).
createAlias("values", "v").
add(Restrictions.like("v.svalue", value).ignoreCase());
crit.add(Subqueries.exists(q));