public List listDevPlanTemplates( DevPlanTemplateFilter filter) { Criteria c = getSession().createCriteria(DevPlanTemplate.class); c.setFetchMode("auditInfo", FetchMode.JOIN) .setFetchMode("auditInfo.auditLog", FetchMode.JOIN) .setFetchMode("metaData", FetchMode.JOIN) .setFetchMode("metaData.publishedIn",FetchMode.JOIN) .setFetchMode("pages", FetchMode.JOIN); if (!filter.getAllTemplates()) { c.add(Restrictions.isNotNull("published")).add( Restrictions.isNull("retired")); } Criteria mdCrit = c.createCriteria("metaData"); Criteria orderCriteria; // -- horrendous solution but, as of now atleast, criteria does not // support ordering by childproperties if (filter.getOrderBy().startsWith("metaData.")) { filter.setOrderBy(filter.getOrderBy().substring(9, filter.getOrderBy().length())); orderCriteria = mdCrit; } else { orderCriteria = c; } if ("asc".equals(filter.getOrder())) { orderCriteria.addOrder(Order.asc(filter.getOrderBy())); } else { orderCriteria.addOrder(Order.desc(filter.getOrderBy())); } if (StringUtils.hasText(filter.getSchoolType())) { mdCrit.add(Restrictions.eq("schoolType", filter.getSchoolType())); } String free = "%Unikum%"; // DevPlanTemplate tmp = new DevPlanTemplate(); // tmp.setTitle(free); // tmp.setDescription(free); // TemplateMetaData mdTmp = new TemplateMetaData(); // mdTmp.setCreator(free); // mdTmp.setPublishedIn(new Principal(free)); // tmp.setMetaData(mdTmp); // Example ex = Example.create(tmp).enableLike().ignoreCase(); // Example ex2 = Example.create(mdTmp).enableLike().ignoreCase(); //// c.add(Restrictions.disjunction().add(ex)); //// mdCrit.add(ex2); // c.add(Restrictions.or(ex, ex2)); Property title = Property.forName("title"); Property desc = Property.forName("description"); Property mdCreator = Property.forName("metaData.creator"); Property creator = Property.forName("creator"); Property mdPub = Property.forName("metaData.publishedIn.name"); Property pub = Property.forName("publishedIn.name"); c.add(Restrictions.disjunction().add(title.like(free)).add(desc.like(free))); mdCrit.add(Restrictions.disjunction().add(creator.like(free)).add(pub.like(free))); //c.add(mdCreator.like(free)); //mdCrit.add(pub.like(free)); //c.add(mdPub.like(free)); //mdCrit.add(Restrictions.or(Restrictions.ilike("creator", free), Restrictions.ilike("publishedIn.name", free))); // c.add(Restrictions.or(Restrictions.ilike("title", free), Restrictions.ilike("description", free))); // c.add(Restrictions.or(Restrictions.ilike("metaData.creator", free), Restrictions.ilike("metaData.publishedIn", free))); // c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); return filter.filter(c.list()); }