public AbstractUpdateCollectionCriteriaBuilder(MainQuery mainQuery, QueryContext queryContext, boolean isMainQuery, Class<T> clazz, String alias, String cteName, Class<?> cteClass, Y result, CTEBuilderListener listener, String collectionName) {
super(mainQuery, queryContext, isMainQuery, clazz, alias, cteName, cteClass, result, listener);
this.collectionName = collectionName;
joinManager.join(entityAlias + "." + collectionName, CollectionUpdateModificationQuerySpecification.COLLECTION_BASE_QUERY_ALIAS, JoinType.LEFT, false, true);
ExtendedManagedType<?> extendedManagedType = mainQuery.metamodel.getManagedType(ExtendedManagedType.class, entityType);
ExtendedAttribute<?, ?> extendedAttribute = extendedManagedType.getAttribute(collectionName);
Map<String, ExtendedAttribute<?, ?>> collectionAttributeEntries = JpaUtils.getCollectionAttributeEntries(mainQuery.metamodel, entityType, extendedAttribute);
if (extendedAttribute.getAttribute() instanceof MapAttribute<?, ?, ?>) {
keyFunctionExpression = "key(" + collectionName + ")";
} else if (extendedAttribute.getAttribute() instanceof ListAttribute<?, ?> && !mainQuery.jpaProvider.isBag(entityType, collectionName)) {
keyFunctionExpression = "index(" + collectionName + ")";
} else {
keyFunctionExpression = null;
}
this.collectionColumnBindingMap = new LinkedHashMap<>(collectionAttributeEntries.size());
this.collectionAttributeEntries = collectionAttributeEntries;
}