Example usage for javax.persistence.metamodel PluralAttribute getName

List of usage examples for javax.persistence.metamodel PluralAttribute getName

Introduction

In this page you can find the example usage for javax.persistence.metamodel PluralAttribute getName.

Prototype

String getName();

Source Link

Document

Return the name of the attribute.

Usage

From source file:com.dbs.sdwt.jpa.ByExampleUtil.java

public <T> List<Predicate> byExampleOnXToMany(ManagedType<T> mt, Root<T> mtPath, T mtValue, SearchParameters sp,
        CriteriaBuilder builder) {/*from  www.j  ava2  s  . c  o  m*/
    List<Predicate> predicates = newArrayList();
    for (PluralAttribute<? super T, ?, ?> pa : mt.getPluralAttributes()) {
        if (pa.getCollectionType() == PluralAttribute.CollectionType.LIST) {
            List<?> values = (List<?>) jpaUtil.getValue(mtValue, mt.getAttribute(pa.getName()));
            if (values != null && !values.isEmpty()) {
                if (sp.getUseAndInXToMany()) {
                    if (values.size() > 3) {
                        log.warn(
                                "Please note that using AND restriction on an Many to Many relationship requires as many joins as values");
                    }
                    for (Object value : values) {
                        ListJoin<T, ?> join = mtPath.join(mt.getList(pa.getName()));
                        predicates.add(join.in(value));
                    }
                } else {
                    ListJoin<T, ?> join = mtPath.join(mt.getList(pa.getName()));
                    predicates.add(join.in(values));
                }
            }
        }
    }
    return predicates;
}

From source file:net.sf.gazpachoquest.qbe.ByExampleSpecification.java

public <T extends Persistable> Specification<T> byExampleOnEntity(final T example, final SearchParameters sp) {
    Validate.notNull(example, "example must not be null");

    return new Specification<T>() {

        @Override/* w w  w .  jav  a  2  s  .  c  o  m*/
        public Predicate toPredicate(final Root<T> rootPath, final CriteriaQuery<?> query,
                final CriteriaBuilder builder) {
            Class<T> type = rootPath.getModel().getBindableJavaType();

            ManagedType<T> mt = em.getMetamodel().entity(type);

            List<Predicate> predicates = new ArrayList<Predicate>();
            predicates.addAll(byExample(mt, rootPath, example, sp, builder));
            predicates.addAll(byExampleOnXToOne(mt, rootPath, example, sp, builder));
            // 1 level deep only
            predicates.addAll(byExampleOnManyToMany(mt, rootPath, example, sp, builder));
            // order by
            query.orderBy(JpaUtil.buildJpaOrders(sp.getOrders(), rootPath, builder));
            return JpaUtil.andPredicate(builder, predicates);
        }

        //https://github.com/jaxio/generated-projects/tree/master/jsf2-spring-conversation/src/main/generated-java/com/jaxio/appli/repository/support

        public <T extends Persistable> List<Predicate> byExample(final ManagedType<T> mt, final Path<T> mtPath,
                final T mtValue, final SearchParameters sp, final CriteriaBuilder builder) {
            List<Predicate> predicates = new ArrayList<Predicate>();
            for (SingularAttribute<? super T, ?> attr : mt.getSingularAttributes()) {
                if (attr.getPersistentAttributeType() == MANY_TO_ONE
                        || attr.getPersistentAttributeType() == ONE_TO_ONE
                        || attr.getPersistentAttributeType() == EMBEDDED
                        || attr.getJavaType().isAssignableFrom(Map.class)) {
                    continue;
                }
                Object attrValue = getValue(mtValue, attr);

                if (attrValue != null) {
                    if (attr.getJavaType() == String.class) {
                        if (isNotEmpty((String) attrValue)) {
                            SingularAttribute<? super T, String> stringAttribute = mt
                                    .getSingularAttribute(attr.getName(), String.class);
                            predicates.add(JpaUtil.stringPredicate(mtPath.get(stringAttribute), attrValue, sp,
                                    builder));
                        }
                    } else {
                        SingularAttribute<? super T, ?> attribute = mt.getSingularAttribute(attr.getName(),
                                attr.getJavaType());
                        // apply equal
                        predicates.add(builder.equal(mtPath.get(attribute), attrValue));
                    }
                }
            }
            return predicates;
        }

        /**
         * Construct a join predicate on collection (eg many to many, List)
         */
        public <T extends Persistable> List<Predicate> byExampleOnManyToMany(final ManagedType<T> mt,
                final Root<T> mtPath, final T mtValue, final SearchParameters sp,
                final CriteriaBuilder builder) {
            List<Predicate> predicates = new ArrayList<Predicate>();
            for (PluralAttribute<T, ?, ?> pa : mt.getDeclaredPluralAttributes()) {
                if (pa.getCollectionType() == PluralAttribute.CollectionType.LIST) {
                    List<?> value = (List<?>) getValue(mtValue, mt.getAttribute(pa.getName()));

                    if (value != null && !value.isEmpty()) {
                        ListJoin<T, ?> join = mtPath.join(mt.getDeclaredList(pa.getName()));
                        predicates.add(join.in(value));
                    }
                }
                if (pa.getCollectionType() == PluralAttribute.CollectionType.SET) {
                    Set<?> value = (Set<?>) getValue(mtValue, mt.getAttribute(pa.getName()));

                    if (value != null && !value.isEmpty()) {
                        SetJoin<T, ?> join = mtPath.join(mt.getDeclaredSet(pa.getName()));
                        predicates.add(join.in(value));
                    }
                }
            }
            return predicates;
        }

        /**
         * Invoke byExample method for each not null x-to-one association
         * when their pk is not set. This allows you
         * to search entities based on an associated entity's properties
         * value.
         */
        @SuppressWarnings("unchecked")
        public <T extends Persistable, M2O extends Persistable> List<Predicate> byExampleOnXToOne(
                final ManagedType<T> mt, final Root<T> mtPath, final T mtValue, final SearchParameters sp,
                final CriteriaBuilder builder) {
            List<Predicate> predicates = new ArrayList<Predicate>();
            for (SingularAttribute<? super T, ?> attr : mt.getSingularAttributes()) {
                if (attr.getPersistentAttributeType() == MANY_TO_ONE
                        || attr.getPersistentAttributeType() == ONE_TO_ONE) { //
                    M2O m2oValue = (M2O) getValue(mtValue, mt.getAttribute(attr.getName()));

                    if (m2oValue != null) {
                        Class<M2O> m2oType = (Class<M2O>) attr.getBindableJavaType();
                        ManagedType<M2O> m2oMt = em.getMetamodel().entity(m2oType);
                        Path<M2O> m2oPath = (Path<M2O>) mtPath.get(attr);
                        predicates.addAll(byExample(m2oMt, m2oPath, m2oValue, sp, builder));
                    }
                }
            }
            return predicates;
        }

        private <T> Object getValue(final T example, final Attribute<? super T, ?> attr) {
            Object value = null;
            try {
                if (attr.getJavaMember() instanceof Method) {
                    value = ((Method) attr.getJavaMember()).invoke(example, new Object[0]);
                } else if (attr.getJavaMember() instanceof Field) {
                    value = ReflectionUtils.getField((Field) attr.getJavaMember(), example);
                }

                if (value instanceof ValueHolderInterface) {
                    value = ((ValueHolderInterface) value).getValue();
                }

            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            } catch (InvocationTargetException e) {
                throw new RuntimeException(e);
            }
            return value;
        }

    };

}

From source file:org.batoo.jpa.core.impl.criteria.join.FetchParentImpl.java

/**
 * {@inheritDoc}//from w ww  . j  a v  a  2 s. co  m
 * 
 */
@Override
public final <Y> FetchImpl<X, Y> fetch(PluralAttribute<? super X, ?, Y> attribute, JoinType jt) {
    return this.fetch(attribute.getName(), jt);
}

From source file:org.querybyexample.jpa.ByExampleUtil.java

/**
 * Construct a join predicate on collection (eg many to many, List)
 *///from   w ww .  ja v a 2s  . com
public <T> List<Predicate> byExampleOnManyToMany(ManagedType<T> mt, Root<T> mtPath, T mtValue,
        SearchParameters sp, CriteriaBuilder builder) {
    List<Predicate> predicates = newArrayList();
    for (PluralAttribute<? super T, ?, ?> pa : mt.getPluralAttributes()) {
        if (pa.getCollectionType() == PluralAttribute.CollectionType.LIST) {
            List<?> values = (List<?>) JpaUtil.getValue(mtValue, mt.getAttribute(pa.getName()));
            if (values != null && !values.isEmpty()) {
                if (sp.getUseANDInManyToMany()) {
                    if (values.size() > 3) {
                        log.warn(
                                "Please note that using AND restriction on an Many to Many relationship requires as many joins as values");
                    }
                    for (Object value : values) {
                        ListJoin<T, ?> join = mtPath.join(mt.getList(pa.getName()));
                        predicates.add(join.in(value));
                    }
                } else {
                    ListJoin<T, ?> join = mtPath.join(mt.getList(pa.getName()));
                    predicates.add(join.in(values));
                }
            }
        }
    }
    return predicates;
}

From source file:ru.savvy.jpafilterbuilder.FilterCriteriaBuilder.java

/**
 * This clumsy code is just to get the class of plural attribute mapping
 *
 * @param et/*w w w.  ja v a2  s  .  c  o m*/
 * @param fieldName
 * @return
 */
private Class<?> getPluralJavaType(EntityType<?> et, String fieldName) {
    for (PluralAttribute pa : et.getPluralAttributes()) {
        if (pa.getName().equals(fieldName)) {
            switch (pa.getCollectionType()) {
            case COLLECTION:
                return et.getCollection(fieldName).getElementType().getJavaType();
            case LIST:
                return et.getList(fieldName).getElementType().getJavaType();
            case SET:
                return et.getSet(fieldName).getElementType().getJavaType();
            case MAP:
                throw new UnsupportedOperationException("Entity Map mapping unsupported for entity: "
                        + et.getName() + " field name: " + fieldName);
            }
        }
    }
    throw new IllegalArgumentException(
            "Field " + fieldName + " of entity " + et.getName() + " is not a plural attribute");
}