use of org.hibernate.loader.plan.spi.CompositeAttributeFetch in project hibernate-orm by hibernate.
the class AbstractExpandingFetchSource method buildCompositeAttributeFetch.
@Override
public CompositeAttributeFetch buildCompositeAttributeFetch(AttributeDefinition attributeDefinition) {
final ExpandingCompositeQuerySpace compositeQuerySpace = QuerySpaceHelper.INSTANCE.makeCompositeQuerySpace(expandingQuerySpace(), attributeDefinition, getQuerySpaces().generateImplicitUid(), true);
final CompositeAttributeFetch fetch = createCompositeAttributeFetch(attributeDefinition, compositeQuerySpace);
addFetch(fetch);
return fetch;
}
use of org.hibernate.loader.plan.spi.CompositeAttributeFetch in project hibernate-orm by hibernate.
the class AbstractLoadPlanBuildingAssociationVisitationStrategy method finishingAttribute.
@Override
public void finishingAttribute(AttributeDefinition attributeDefinition) {
final Type attributeType = attributeDefinition.getType();
if (attributeType.isAssociationType()) {
final AssociationAttributeDefinition associationAttributeDefinition = (AssociationAttributeDefinition) attributeDefinition;
if (attributeType.isAnyType()) {
// Nothing to do because AnyFetch does not implement ExpandingFetchSource (i.e., it cannot be pushed/popped).
} else if (attributeType.isEntityType()) {
final ExpandingFetchSource source = currentSource();
// associationAttributeDefinition.
if (AttributeFetch.class.isInstance(source) && associationAttributeDefinition.equals(AttributeFetch.class.cast(source).getFetchedAttributeDefinition())) {
final ExpandingFetchSource popped = popFromStack();
checkPoppedEntity(popped, associationAttributeDefinition.toEntityDefinition());
}
} else if (attributeType.isCollectionType()) {
final CollectionReference currentCollection = currentCollection();
// associationAttributeDefinition.
if (AttributeFetch.class.isInstance(currentCollection) && associationAttributeDefinition.equals(AttributeFetch.class.cast(currentCollection).getFetchedAttributeDefinition())) {
final CollectionReference popped = popFromCollectionStack();
checkedPoppedCollection(popped, associationAttributeDefinition.toCollectionDefinition());
}
}
} else if (attributeType.isComponentType()) {
// CompositeFetch is always pushed, during #startingAttribute(),
// so pop the current fetch owner, and make sure what we just popped represents this composition
final ExpandingFetchSource popped = popFromStack();
if (!CompositeAttributeFetch.class.isInstance(popped)) {
throw new WalkingException(String.format("Mismatched FetchSource from stack on pop; expected: CompositeAttributeFetch; actual: [%s]", popped));
}
final CompositeAttributeFetch poppedAsCompositeAttributeFetch = (CompositeAttributeFetch) popped;
if (!attributeDefinition.equals(poppedAsCompositeAttributeFetch.getFetchedAttributeDefinition())) {
throw new WalkingException(String.format("Mismatched CompositeAttributeFetch from stack on pop; expected fetch for attribute: [%s]; actual: [%s]", attributeDefinition, poppedAsCompositeAttributeFetch.getFetchedAttributeDefinition()));
}
}
log.tracef("%s Finishing up attribute : %s", StringHelper.repeat("<<", fetchSourceStack.size()), attributeDefinition);
currentPropertyPath = currentPropertyPath.getParent();
}
Aggregations