List of usage examples for javax.persistence.metamodel SingularAttribute getJavaMember
java.lang.reflect.Member getJavaMember();
java.lang.reflect.Member
for the represented attribute. From source file:com.impetus.client.cassandra.thrift.CQLTranslator.java
/** * Builds the embedded value./*from w w w . j a v a 2 s .c o m*/ * * @param record * the record * @param metaModel * the meta model * @param embeddedValueBuilder * the embedded value builder * @param attribute * the attribute */ private void buildEmbeddedValue(final Object record, MetamodelImpl metaModel, StringBuilder embeddedValueBuilder, SingularAttribute attribute) { // TODO Auto-generated method stub Field field = (Field) attribute.getJavaMember(); EmbeddableType embeddableKey = metaModel.embeddable(field.getType()); Object embeddableKeyObj = PropertyAccessorHelper.getObject(record, field); if (embeddableKeyObj != null) { StringBuilder tempBuilder = new StringBuilder(); tempBuilder.append(Constants.OPEN_CURLY_BRACKET); for (Field embeddableColumn : field.getType().getDeclaredFields()) { if (!ReflectUtils.isTransientOrStatic(embeddableColumn)) { Attribute subAttribute = (SingularAttribute) embeddableKey .getAttribute(embeddableColumn.getName()); if (metaModel.isEmbeddable(((AbstractAttribute) subAttribute).getBindableJavaType())) { // construct map; recursive // send attribute buildEmbeddedValue(embeddableKeyObj, metaModel, tempBuilder, (SingularAttribute) subAttribute); } else { // append key value appendColumnName(tempBuilder, ((AbstractAttribute) (embeddableKey.getAttribute(embeddableColumn.getName()))) .getJPAColumnName()); tempBuilder.append(Constants.COLON); appendColumnValue(tempBuilder, embeddableKeyObj, embeddableColumn); } tempBuilder.append(Constants.COMMA); } } // strip last char and append '}' tempBuilder.deleteCharAt(tempBuilder.length() - 1); tempBuilder.append(Constants.CLOSE_CURLY_BRACKET); appendColumnName(embeddedValueBuilder, ((AbstractAttribute) attribute).getJPAColumnName()); embeddedValueBuilder.append(Constants.COLON); embeddedValueBuilder.append(tempBuilder); } else { embeddedValueBuilder.deleteCharAt(embeddedValueBuilder.length() - 1); } }
From source file:com.impetus.client.cassandra.thrift.CQLTranslator.java
/** * Translate composite id./* www . j a v a 2s . com*/ * * @param record * the record * @param m * the m * @param type * the type * @param metaModel * the meta model * @param builders * the builders * @param columnBuilders * the column builders * @param externalProperties * the external properties * @param kunderaMetadata * the kundera metadata * @param tableName * the table name * @param attribute * the attribute */ private void translateCompositeId(final Object record, final EntityMetadata m, TranslationType type, MetamodelImpl metaModel, Map<String, StringBuilder> builders, Map<String, StringBuilder> columnBuilders, Map<String, Object> externalProperties, final KunderaMetadata kunderaMetadata, String tableName, SingularAttribute attribute) { StringBuilder builder = builders.get(tableName); StringBuilder columnBuilder = columnBuilders.get(tableName); Field field = (Field) attribute.getJavaMember(); if (metaModel.isEmbeddable(((AbstractAttribute) attribute).getBindableJavaType())) { // builder. // Means it is a compound key! As other // iterate for it's fields to populate it's values in // order! EmbeddableType compoundKey = metaModel.embeddable(field.getType()); Object compoundKeyObj = PropertyAccessorHelper.getObject(record, field); for (Field compositeColumn : field.getType().getDeclaredFields()) { if (!ReflectUtils.isTransientOrStatic(compositeColumn)) { attribute = (SingularAttribute) compoundKey.getAttribute(compositeColumn.getName()); if (metaModel.isEmbeddable(((AbstractAttribute) attribute).getBindableJavaType())) { translateCompositeId(compoundKeyObj, m, type, metaModel, builders, columnBuilders, externalProperties, kunderaMetadata, tableName, attribute); } else { onTranslation(type, builder, columnBuilder, ((AbstractAttribute) (compoundKey.getAttribute(compositeColumn.getName()))) .getJPAColumnName(), compoundKeyObj, compositeColumn); } } } } else if (!ReflectUtils.isTransientOrStatic(field)) { onTranslation(type, builder, columnBuilder, CassandraUtilities.getIdColumnName(kunderaMetadata, m, externalProperties, true), record, field); } }
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//from www . ja v a 2s .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; } }; }