protected void clearCollections(EntityManager em, Class<?>... entityClasses) { for (Class<?> c : entityClasses) { List<String> deletes = PLURAL_DELETES.get(c); if (deletes == null) { Metamodel entityMetamodel = cbf.getService(Metamodel.class); EntityType<?> t = entityMetamodel.entity(c); deletes = new ArrayList<>(); for (PluralAttribute<?, ?, ?> pluralAttribute : t.getPluralAttributes()) { JoinTable joinTable = jpaProvider.getJoinTable(t, pluralAttribute.getName()); if (joinTable != null) { deletes.add("delete from " + joinTable.getTableName()); } } PLURAL_DELETES.put(c, deletes); } for (String delete : deletes) { em.createNativeQuery(delete).executeUpdate(); } } }
protected void clearCollections(EntityManager em, Class<?>... entityClasses) { for (Class<?> c : entityClasses) { List<String> deletes = PLURAL_DELETES.get(c); if (deletes == null) { Metamodel entityMetamodel = cbf.getService(Metamodel.class); EntityType<?> t = entityMetamodel.entity(c); deletes = new ArrayList<>(); for (PluralAttribute<?, ?, ?> pluralAttribute : t.getPluralAttributes()) { JoinTable joinTable = jpaProvider.getJoinTable(t, pluralAttribute.getName()); if (joinTable != null) { deletes.add("delete from " + joinTable.getTableName()); } } PLURAL_DELETES.put(c, deletes); } for (String delete : deletes) { em.createNativeQuery(delete).executeUpdate(); } } }
@Override public String tableFromEntityRelation(Class<?> entityClass, String relationName) { JoinTable joinTable = jpaProvider.getJoinTable(em.getMetamodel().entity(entityClass), relationName); if (joinTable != null) { return joinTable.getTableName(); } return null; } };
private void visitKeyOrIndexExpression(PathExpression pathExpression) { JoinNode node = (JoinNode) pathExpression.getBaseNode(); Attribute<?, ?> attribute = node.getParentTreeNode().getAttribute(); // Exclude element collections as they are not problematic if (!jpaProvider.getJpaMetamodelAccessor().isElementCollection(attribute)) { // There are weird mappings possible, we have to check if the attribute is a join table if (jpaProvider.getJoinTable(node.getParent().getEntityType(), attribute.getName()) != null) { keyRestrictedLeftJoins.add(node); } } } }
String ownerAlias = extendedQuerySupport.getSqlAlias(em, baseQuery, entityAlias); String targetAlias = extendedQuerySupport.getSqlAlias(em, baseQuery, CollectionUpdateModificationQuerySpecification.COLLECTION_BASE_QUERY_ALIAS); JoinTable joinTable = mainQuery.jpaProvider.getJoinTable(entityType, collectionName); int joinTableIndex = SqlUtils.indexOfTableName(sql, joinTable.getTableName()); String collectionAlias = SqlUtils.extractAlias(sql, joinTableIndex + joinTable.getTableName().length());
String ownerAlias = extendedQuerySupport.getSqlAlias(em, insertExampleQuery, entityAlias); String targetAlias = extendedQuerySupport.getSqlAlias(em, insertExampleQuery, COLLECTION_BASE_QUERY_ALIAS); JoinTable joinTable = mainQuery.jpaProvider.getJoinTable(entityType, collectionName); int joinTableIndex = SqlUtils.indexOfTableName(insertExampleSql, joinTable.getTableName()); String collectionAlias = SqlUtils.extractAlias(insertExampleSql, joinTableIndex + joinTable.getTableName().length());
String ownerAlias = extendedQuerySupport.getSqlAlias(em, baseQuery, entityAlias); String targetAlias = extendedQuerySupport.getSqlAlias(em, baseQuery, CollectionDeleteModificationQuerySpecification.COLLECTION_BASE_QUERY_ALIAS); JoinTable joinTable = mainQuery.jpaProvider.getJoinTable(entityType, collectionName); if (joinTable == null) { throw new IllegalStateException("Deleting inverse collections is not supported!");
this.isBag = jpaProvider.isBag(entityType, attributeName); this.mappedBy = jpaProvider.getMappedBy(entityType, attributeName); this.joinTable = jpaProvider.getJoinTable(entityType, attributeName); this.columnNames = jpaProvider.getColumnNames(entityType, attributeName); this.columnTypes = jpaProvider.getColumnTypes(entityType, attributeName);