/** * Adds attribute value criteria to the given criteria query * * @param criteria the criteria * @param serializedAttributeValues the serialized attribute values * @param <AT> the attribute type */ public static <AT extends AttributeType> void addAttributeCriteria(Criteria criteria, Map<AT, String> serializedAttributeValues) { Conjunction conjunction = Restrictions.conjunction(); int a = 0; for (Map.Entry<AT, String> entry : serializedAttributeValues.entrySet()) { String alias = "attributes" + (a++); DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Location.class).setProjection(Projections.id()); detachedCriteria.createAlias("attributes", alias); detachedCriteria.add(Restrictions.eq(alias + ".attributeType", entry.getKey())); detachedCriteria.add(Restrictions.eq(alias + ".valueReference", entry.getValue())); detachedCriteria.add(Restrictions.eq(alias + ".voided", false)); conjunction.add(Property.forName("id").in(detachedCriteria)); } criteria.add(conjunction); }
@Override public org.grails.datastore.mapping.query.api.Criteria inList(String propertyName, QueryableCriteria<?> subquery) { addToCriteria(Property.forName(propertyName).in(convertToHibernateCriteria(subquery))); return this; }
@Override public void restrictPaginationByArrayed(Criteria criteria, boolean isArrayed, Consumer<String> errorHandler) { DetachedCriteria subquery = DetachedCriteria.forClass(Array.class) .createAlias("samples", "sample") .setProjection(Projections.property("sample.id")); if (isArrayed) { criteria.add(Property.forName("id").in(subquery)); } else { criteria.add(Property.forName("id").notIn(subquery)); } }
@Override public Criterion toHibernateCriterion(AbstractHibernateQuery hibernateQuery, Query.Criterion criterion, String alias) { Query.In inListQuery = (Query.In) criterion; QueryableCriteria subquery = inListQuery.getSubquery(); if(subquery != null) { return Property.forName(getPropertyName(criterion,alias)).in( toHibernateDetachedCriteria(hibernateQuery, subquery) ); } else { return Restrictions.in(getPropertyName(criterion, alias), inListQuery.getValues()); } } });
DetachedCriteria detachedCriteriaForData = DetachedCriteria.forClass(ProcessInstance.class, "data"); detachedCriteriaForData.addOrder(Order.desc("createDate")); detachedCriteriaForData.add(Property.forName("id").in(ids)); detachedCriteriaForData.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);