List of usage examples for javax.persistence.metamodel Metamodel entity
<X> EntityType<X> entity(Class<X> cls);
From source file:com.impetus.kundera.metadata.MetadataUtils.java
/** * Checks whether an entity with given metadata contains a collection field * //from w w w.j ava 2s. com * @param m * @return */ public static boolean containsBasicElementCollectionField(final EntityMetadata m, final KunderaMetadata kunderaMetadata) { Metamodel metaModel = kunderaMetadata.getApplicationMetadata().getMetamodel(m.getPersistenceUnit()); EntityType entityType = metaModel.entity(m.getEntityClazz()); Iterator<Attribute> iter = entityType.getAttributes().iterator(); while (iter.hasNext()) { Attribute attr = iter.next(); if (attr.isCollection() && !attr.isAssociation() && isBasicElementCollectionField((Field) attr.getJavaMember())) { return true; } } return false; }
From source file:com.impetus.kundera.metadata.MetadataUtils.java
private static void getEmbeddableType(EntityMetadata m, Map<String, Field> columnNameToFieldMap, Map<String, Field> superColumnNameToFieldMap, final KunderaMetadata kunderaMetadata) { Metamodel metaModel = kunderaMetadata.getApplicationMetadata().getMetamodel(m.getPersistenceUnit()); EntityType entityType = metaModel.entity(m.getEntityClazz()); Set attributes = entityType.getAttributes(); Iterator<Attribute> iter = attributes.iterator(); while (iter.hasNext()) { Attribute attribute = iter.next(); if (((MetamodelImpl) metaModel).isEmbeddable(((AbstractAttribute) attribute).getBindableJavaType())) { superColumnNameToFieldMap.put(((AbstractAttribute) attribute).getJPAColumnName(), (Field) attribute.getJavaMember()); if (columnNameToFieldMap != null) { getAttributeOfEmbedddable(columnNameToFieldMap, metaModel, attribute); }// ww w . ja v a 2s. c o m } else { if (columnNameToFieldMap != null) { columnNameToFieldMap.put(((AbstractAttribute) attribute).getJPAColumnName(), (Field) attribute.getJavaMember()); } } } }
From source file:com.impetus.kundera.metadata.MetadataUtils.java
/** * Gets the enclosing document name./*from ww w . j av a2 s.c o m*/ * * @param m * the m * @param criteria * Input criteria * @param viaColumnName * true if <code>criteria</code> is column Name, false if * <code>criteria</code> is column field name * @return the enclosing document name */ public static String getEnclosingEmbeddedFieldName(EntityMetadata m, String criteria, boolean viaColumnName, final KunderaMetadata kunderaMetadata) { String enclosingEmbeddedFieldName = null; StringTokenizer strToken = new StringTokenizer(criteria, "."); String embeddableAttributeName = null; String embeddedFieldName = null; String nestedEmbeddedFieldName = null; if (strToken.countTokens() > 0) { embeddableAttributeName = strToken.nextToken(); } if (strToken.countTokens() > 0) { embeddedFieldName = strToken.nextToken(); } if (strToken.countTokens() > 0) { nestedEmbeddedFieldName = strToken.nextToken(); } Metamodel metaModel = kunderaMetadata.getApplicationMetadata().getMetamodel(m.getPersistenceUnit()); EntityType entity = metaModel.entity(m.getEntityClazz()); try { Attribute attribute = entity.getAttribute(embeddableAttributeName); if (((MetamodelImpl) metaModel).isEmbeddable(((AbstractAttribute) attribute).getBindableJavaType())) { EmbeddableType embeddable = metaModel .embeddable(((AbstractAttribute) attribute).getBindableJavaType()); Iterator<Attribute> attributeIter = embeddable.getAttributes().iterator(); while (attributeIter.hasNext()) { AbstractAttribute attrib = (AbstractAttribute) attributeIter.next(); if (viaColumnName && attrib.getName().equals(embeddedFieldName)) { if (nestedEmbeddedFieldName != null && ((MetamodelImpl) metaModel) .isEmbeddable(((AbstractAttribute) attrib).getBindableJavaType())) { EmbeddableType nestedEmbeddable = metaModel .embeddable(((AbstractAttribute) attrib).getBindableJavaType()); Iterator<Attribute> iter = embeddable.getAttributes().iterator(); while (iter.hasNext()) { AbstractAttribute nestedAttribute = (AbstractAttribute) iter.next(); if (viaColumnName && nestedAttribute.getName().equals(embeddedFieldName)) { return nestedAttribute.getName(); } if (!viaColumnName && nestedAttribute.getJPAColumnName().equals(embeddedFieldName)) { return nestedAttribute.getName(); } } } else if (nestedEmbeddedFieldName != null && !((MetamodelImpl) metaModel) .isEmbeddable(((AbstractAttribute) attrib).getBindableJavaType())) { return null; } else { return attribute.getName(); } } if (!viaColumnName && attrib.getJPAColumnName().equals(embeddedFieldName)) { return attribute.getName(); } } } } catch (IllegalArgumentException iax) { return null; } return enclosingEmbeddedFieldName; }
From source file:bq.jpa.demo.metadata.service.MetadataService.java
public void doMD() { Metamodel md = em.getMetamodel(); EntityType<Employee> employee = md.entity(Employee.class); for (Attribute<? super Employee, ?> attr : employee.getAttributes()) { System.out.println(attr.getName() + " | " + attr.getJavaType().getName() + " | " + attr.getPersistentAttributeType()); }// w w w .ja v a2s . c o m }
From source file:de.tudarmstadt.ukp.clarin.webanno.support.EntityModel.java
private void analyze(T aObject) { if (aObject != null) { entityClass = HibernateProxyHelper.getClassWithoutInitializingProxy(aObject); String idProperty = null; Metamodel metamodel = getEntityManager().getMetamodel(); EntityType entity = metamodel.entity(entityClass); Set<SingularAttribute> singularAttributes = entity.getSingularAttributes(); for (SingularAttribute singularAttribute : singularAttributes) { if (singularAttribute.isId()) { idProperty = singularAttribute.getName(); break; }/* www . jav a2s . c o m*/ } if (idProperty == null) { throw new RuntimeException("id field not found"); } DirectFieldAccessor accessor = new DirectFieldAccessor(aObject); id = (Number) accessor.getPropertyValue(idProperty); } else { entityClass = null; id = null; } }
From source file:things.jpa.JpaConnector.java
private String getIdProperty(Class entityClass) { String idProperty = null;//from ww w . ja v a2 s . c o m Metamodel metamodel = entityManager.getMetamodel(); EntityType entity = metamodel.entity(entityClass); Set<SingularAttribute> singularAttributes = entity.getSingularAttributes(); for (SingularAttribute singularAttribute : singularAttributes) { if (singularAttribute.isId()) { idProperty = singularAttribute.getName(); break; } } if (idProperty == null) throw new RuntimeException("id field not found"); return idProperty; }
From source file:edu.kit.dama.mdm.core.jpa.MetaDataManagerJpa.java
@Override public final <T> List<T> find(final T first, final T last) throws UnauthorizedAccessAttemptException { List<T> resultList = new ArrayList(); boolean firstCondition = true; // Maybe one of the arguments could be null. // Test for the instance which is not null. T argumentNotNull = null;/*from w w w . j av a2 s . c om*/ if (first != null) { argumentNotNull = first; } else if (last != null) { argumentNotNull = last; } if (argumentNotNull == null) { // both instances are null nothing to do. return resultList; } StringBuilder queryString = new StringBuilder("SELECT e FROM ") .append(EntityManagerHelper.getEntityTableName(argumentNotNull.getClass())).append(" e"); try { Metamodel metamodel = entityManager.getMetamodel(); for (Object attribute : metamodel.entity(argumentNotNull.getClass()).getAttributes()) { Attribute myAttribute = ((Attribute) attribute); LOGGER.trace("Attribute: {}\nName: {}\n ", attribute, myAttribute.getName()); // Only basic types where tested. if (myAttribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.BASIC) { String propertyName = myAttribute.getName(); String firstValue = null; String lastValue = null; if (first != null) { firstValue = BeanUtils.getProperty(first, propertyName); } if (last != null) { lastValue = BeanUtils.getProperty(last, propertyName); } if ((firstValue != null) || (lastValue != null)) { LOGGER.trace("At least one property is set!"); if (!firstCondition) { queryString.append(" AND "); } else { queryString.append(" WHERE"); firstCondition = false; } queryString.append(" e.").append(propertyName); if ((firstValue != null) && (lastValue != null)) { queryString.append(" BETWEEN '").append(firstValue).append("' AND '").append(lastValue) .append("'"); } else if (firstValue != null) { queryString.append(" >= '").append(firstValue).append("'"); } else { // lastValue != null queryString.append(" <= '").append(lastValue).append("'"); } } } else { LOGGER.trace( "****************************************" + "*****************************\nAttribute skipped: {}", myAttribute.getDeclaringType().getClass()); } } LOGGER.debug(queryString.toString()); Query q = entityManager.createQuery(queryString.toString()); applyProperties(q); resultList = (List<T>) q.getResultList(); } catch (Exception e) { LOGGER.warn("Failed to obtain result in find-method for query: " + queryString.toString(), e); } finally { finalizeEntityManagerAccess("find(first,last)", null, argumentNotNull); } return resultList; }
From source file:com.impetus.client.mongodb.query.MongoDBQuery.java
/** * Prepare order by clause./* w w w.j av a 2s .com*/ * * @param metadata * the metadata * @return order by clause. */ private BasicDBObject getOrderByClause(final EntityMetadata metadata) { BasicDBObject orderByClause = null; Metamodel metaModel = kunderaMetadata.getApplicationMetadata().getMetamodel(metadata.getPersistenceUnit()); EntityType entityType = metaModel.entity(metadata.getEntityClazz()); AbstractManagedType managedType = (AbstractManagedType) metaModel.entity(metadata.getEntityClazz()); List<SortOrdering> orders = kunderaQuery.getOrdering(); if (orders != null) { orderByClause = new BasicDBObject(); if (!managedType.hasLobAttribute()) { for (SortOrdering order : orders) { orderByClause.append(getColumnName(metadata, entityType, order.getColumnName()), order.getOrder().equals(SortOrder.ASC) ? 1 : -1); } } else { for (SortOrdering order : orders) { orderByClause.append("metadata." + getColumnName(metadata, entityType, order.getColumnName()), order.getOrder().equals(SortOrder.ASC) ? 1 : -1); } } } return orderByClause; }
From source file:com.impetus.client.mongodb.query.MongoDBQuery.java
/** * Handle special functions./*w w w.ja v a2 s. c o m*/ * * @return the int */ private int handleSpecialFunctions() { boolean needsSpecialAttention = false; outer: for (UpdateClause c : kunderaQuery.getUpdateClauseQueue()) { for (int i = 0; i < FUNCTION_KEYWORDS.length; i++) { if (c.getValue() instanceof String) { String func = c.getValue().toString(); func = func.replaceAll(" ", ""); if (func.toUpperCase().matches(FUNCTION_KEYWORDS[i])) { needsSpecialAttention = true; c.setValue(func); break outer; } } } } if (!needsSpecialAttention) return -1; EntityMetadata m = getEntityMetadata(); Metamodel metaModel = kunderaMetadata.getApplicationMetadata().getMetamodel(m.getPersistenceUnit()); Queue filterClauseQueue = kunderaQuery.getFilterClauseQueue(); BasicDBObject query = createMongoQuery(m, filterClauseQueue); BasicDBObject update = new BasicDBObject(); for (UpdateClause c : kunderaQuery.getUpdateClauseQueue()) { String columName = getColumnName(m, metaModel.entity(m.getEntityClazz()), c.getProperty()); boolean isSpecialFunction = false; for (int i = 0; i < FUNCTION_KEYWORDS.length; i++) { if (c.getValue() instanceof String && c.getValue().toString().toUpperCase().matches(FUNCTION_KEYWORDS[i])) { isSpecialFunction = true; if (c.getValue().toString().toUpperCase().startsWith("INCREMENT(")) { String val = c.getValue().toString().toUpperCase(); val = val.substring(10, val.indexOf(")")); update.put("$inc", new BasicDBObject(columName, Integer.valueOf(val))); } else if (c.getValue().toString().toUpperCase().startsWith("DECREMENT(")) { String val = c.getValue().toString().toUpperCase(); val = val.substring(10, val.indexOf(")")); update.put("$inc", new BasicDBObject(columName, -Integer.valueOf(val))); } } } if (!isSpecialFunction) { update.put(columName, c.getValue()); } } Client client = persistenceDelegeator.getClient(m); return ((MongoDBClient) client).handleUpdateFunctions(query, update, m.getTableName()); }
From source file:com.impetus.client.rdbms.query.RDBMSEntityReader.java
/** * Gets the sql query from jpa./* www. j a v a2 s . co m*/ * * @param entityMetadata * the entity metadata * @param relations * the relations * @param primaryKeys * the primary keys * @return the sql query from jpa */ public String getSqlQueryFromJPA(EntityMetadata entityMetadata, List<String> relations, Set<String> primaryKeys) { ApplicationMetadata appMetadata = kunderaMetadata.getApplicationMetadata(); Metamodel metaModel = appMetadata.getMetamodel(entityMetadata.getPersistenceUnit()); if (jpaQuery != null) { String query = appMetadata.getQuery(jpaQuery); boolean isNative = kunderaQuery != null ? kunderaQuery.isNative() : false; if (isNative) { return query != null ? query : jpaQuery; } } // Suffixing the UNDERSCORE instead of prefix as Oracle 11g complains // about invalid characters error while executing the request. String aliasName = entityMetadata.getTableName() + "_"; StringBuilder queryBuilder = new StringBuilder("Select "); EntityType entityType = metaModel.entity(entityMetadata.getEntityClazz()); Set<Attribute> attributes = entityType.getAttributes(); for (Attribute field : attributes) { if (!field.isAssociation() && !field.isCollection() && !((Field) field.getJavaMember()).isAnnotationPresent(ManyToMany.class) && !((Field) field.getJavaMember()).isAnnotationPresent(Transient.class) && !((MetamodelImpl) metaModel) .isEmbeddable(((AbstractAttribute) field).getBindableJavaType())) { queryBuilder.append(aliasName); queryBuilder.append("."); queryBuilder.append(((AbstractAttribute) field).getJPAColumnName()); queryBuilder.append(", "); } } // Handle embedded columns, add them to list. Map<String, EmbeddableType> embeddedColumns = ((MetamodelImpl) metaModel) .getEmbeddables(entityMetadata.getEntityClazz()); for (EmbeddableType embeddedCol : embeddedColumns.values()) { Set<Attribute> embeddedAttributes = embeddedCol.getAttributes(); for (Attribute column : embeddedAttributes) { queryBuilder.append(aliasName); queryBuilder.append("."); queryBuilder.append(((AbstractAttribute) column).getJPAColumnName()); queryBuilder.append(", "); } } if (relations != null) { for (String relation : relations) { Relation rel = entityMetadata.getRelation(entityMetadata.getFieldName(relation)); String r = MetadataUtils.getMappedName(entityMetadata, rel, kunderaMetadata); if (!((AbstractAttribute) entityMetadata.getIdAttribute()).getJPAColumnName() .equalsIgnoreCase(r != null ? r : relation) && rel != null && !rel.getProperty().isAnnotationPresent(ManyToMany.class) && !rel.getProperty().isAnnotationPresent(OneToMany.class) && (rel.getProperty().isAnnotationPresent(OneToOne.class) && StringUtils.isBlank(rel.getMappedBy()) || rel.getProperty().isAnnotationPresent(ManyToOne.class))) { queryBuilder.append(aliasName); queryBuilder.append("."); queryBuilder.append(r != null ? r : relation); queryBuilder.append(", "); } } } // Remove last "," queryBuilder.deleteCharAt(queryBuilder.lastIndexOf(",")); queryBuilder.append(" From "); if (entityMetadata.getSchema() != null && !entityMetadata.getSchema().isEmpty()) { queryBuilder.append(entityMetadata.getSchema() + "."); } queryBuilder.append(entityMetadata.getTableName()); queryBuilder.append(" "); queryBuilder.append(aliasName); // add conditions if (filter != null) { queryBuilder.append(" Where "); } // Append conditions onCondition(entityMetadata, (MetamodelImpl) metaModel, primaryKeys, aliasName, queryBuilder, entityType); return queryBuilder.toString(); }