Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,25 +33,18 @@ public static CollectionInitializerProducer createInitializerProducer(
Fetch indexFetch,
Fetch elementFetch,
DomainResultCreationState creationState) {
switch ( classification ) {
case ARRAY:
return createArrayInitializerProducer( navigablePath, attributeMapping, fetchParent, selected, indexFetch, elementFetch, creationState );
case BAG:
case ID_BAG:
return createBagInitializerProducer( navigablePath, attributeMapping, fetchParent, selected, elementFetch, creationState );
case LIST:
return createListInitializerProducer( navigablePath, attributeMapping, fetchParent, selected, indexFetch, elementFetch, creationState );
case MAP:
case ORDERED_MAP:
case SORTED_MAP:
return createMapInitializerProducer( navigablePath, attributeMapping, fetchParent, selected, indexFetch, elementFetch, creationState );
case SET:
case ORDERED_SET:
case SORTED_SET:
return createSetInitializerProducer( navigablePath, attributeMapping, fetchParent, selected, elementFetch, creationState );
default:
throw new IllegalArgumentException( "Unknown CollectionClassification : " + classification );
}
return switch ( classification ) {
case ARRAY ->
createArrayInitializerProducer( navigablePath, attributeMapping, fetchParent, selected, indexFetch, elementFetch, creationState );
case BAG, ID_BAG ->
createBagInitializerProducer( navigablePath, attributeMapping, fetchParent, selected, elementFetch, creationState );
case LIST ->
createListInitializerProducer( navigablePath, attributeMapping, fetchParent, selected, indexFetch, elementFetch, creationState );
case MAP, ORDERED_MAP, SORTED_MAP ->
createMapInitializerProducer( navigablePath, attributeMapping, fetchParent, selected, indexFetch, elementFetch, creationState );
case SET, ORDERED_SET, SORTED_SET ->
createSetInitializerProducer( navigablePath, attributeMapping, fetchParent, selected, elementFetch, creationState );
};
}

public static CollectionInitializerProducer createArrayInitializerProducer(
Expand Down Expand Up @@ -219,64 +212,54 @@ public static CollectionInitializerProducer createCollectionTypeWrapperInitializ
Fetch indexFetch,
Fetch elementFetch,
DomainResultCreationState creationState) {
switch ( classification ) {
case ARRAY:
return createArrayInitializerProducer(
navigablePath,
attributeMapping,
fetchParent,
selected,
indexFetch,
elementFetch,
creationState
);
case BAG:
case ID_BAG:
return switch ( classification ) {
case ARRAY -> createArrayInitializerProducer(
navigablePath,
attributeMapping,
fetchParent,
selected,
indexFetch,
elementFetch,
creationState
);
case BAG, ID_BAG -> {
assert indexFetch == null;
return createBagInitializerProducer(
navigablePath,
attributeMapping,
fetchParent,
selected,
elementFetch,
creationState
);
case LIST:
return createListInitializerProducer(
navigablePath,
attributeMapping,
fetchParent,
selected,
indexFetch,
elementFetch,
creationState
);
case MAP:
case ORDERED_MAP:
case SORTED_MAP:
return createMapInitializerProducer(
navigablePath,
attributeMapping,
fetchParent,
selected,
indexFetch,
elementFetch,
creationState
);
case SET:
case ORDERED_SET:
case SORTED_SET:
return createSetInitializerProducer(
yield createBagInitializerProducer(
navigablePath,
attributeMapping,
fetchParent,
selected,
elementFetch,
creationState
);
default:
throw new IllegalArgumentException( "Unknown CollectionClassification : " + classification );
}
}
case LIST -> createListInitializerProducer(
navigablePath,
attributeMapping,
fetchParent,
selected,
indexFetch,
elementFetch,
creationState
);
case MAP, ORDERED_MAP, SORTED_MAP -> createMapInitializerProducer(
navigablePath,
attributeMapping,
fetchParent,
selected,
indexFetch,
elementFetch,
creationState
);
case SET, ORDERED_SET, SORTED_SET -> createSetInitializerProducer(
navigablePath,
attributeMapping,
fetchParent,
selected,
elementFetch,
creationState
);
};
}

private InitializerProducerBuilder() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,29 +45,25 @@ class PluralAttributeMetadataImpl<X, Y, E>
this.elementClassification = elementClassification;
this.listIndexOrMapKeyClassification = listIndexOrMapKeyClassification;

final ParameterizedType signatureType = AttributeFactory.getSignatureType( member );
final var signatureType = AttributeFactory.getSignatureType( member );
switch ( collectionClassification ) {
case MAP:
case SORTED_MAP:
case ORDERED_MAP: {
keyJavaType = signatureType != null
? getClassFromGenericArgument( signatureType.getActualTypeArguments()[0] )
: Object.class;

elementJavaType = signatureType != null
? getClassFromGenericArgument( signatureType.getActualTypeArguments()[1] )
: Object.class;

break;
}
case ARRAY:
case LIST: {
keyJavaType = Integer.class;

elementJavaType = signatureType != null
? getClassFromGenericArgument( signatureType.getActualTypeArguments()[0] )
: Object.class;

break;
}
default: {
Expand Down Expand Up @@ -130,14 +126,11 @@ public AttributeMetadata<X,Y> getAttributeMetadata() {
}

private static ValueClassification toValueClassification(AttributeClassification classification) {
switch ( classification ) {
case EMBEDDED:
return ValueClassification.EMBEDDABLE;
case BASIC:
return ValueClassification.BASIC;
default:
return ValueClassification.ENTITY;
}
return switch ( classification ) {
case EMBEDDED -> ValueClassification.EMBEDDABLE;
case BASIC -> ValueClassification.BASIC;
default -> ValueClassification.ENTITY;
};
}

private Class<?> getClassFromGenericArgument(java.lang.reflect.Type type) {
Expand Down Expand Up @@ -165,7 +158,7 @@ else if ( type instanceof WildcardType wildcardType ) {
}

public static CollectionClassification determineCollectionType(Class<?> javaType, Property property) {
final Collection collection = (Collection) property.getValue();
final var collection = (Collection) property.getValue();

if ( java.util.List.class.isAssignableFrom( javaType ) ) {
return CollectionClassification.LIST;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -316,8 +316,7 @@ default String[] getSynchronizedQuerySpaces() {
}

default void visitQuerySpaces(Consumer<String> querySpaceConsumer) {
final String[] spaces = getSynchronizedQuerySpaces();
for (String space : spaces) {
for ( String space : getSynchronizedQuerySpaces() ) {
querySpaceConsumer.accept(space);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,17 @@ default void resolveState(RowProcessingState rowProcessingState) {
* {@link Initializer#isResultInitializer()}.
*/
default <X> void forEachResultAssembler(BiConsumer<Initializer<?>, X> consumer, X arg) {
}

default boolean isEager() {
final var initializer = getInitializer();
return initializer != null && initializer.isEager();
}

default boolean hasLazySubInitializers() {
final var initializer = getInitializer();
return initializer != null
&& ( !initializer.isEager() || initializer.hasLazySubInitializers() );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import org.hibernate.collection.spi.PersistentCollection;
import org.hibernate.engine.spi.CollectionKey;
import org.hibernate.metamodel.mapping.PluralAttributeMapping;
import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.spi.NavigablePath;
import org.hibernate.sql.results.graph.AssemblerCreationState;
import org.hibernate.sql.results.graph.DomainResult;
Expand Down Expand Up @@ -150,8 +149,8 @@ protected void setMissing(Data data) {
}

protected void resolveCollectionKey(Data data, boolean checkPreviousRow) {
final CollectionKey oldKey = data.collectionKey;
final PersistentCollection<?> oldCollectionInstance = data.getCollectionInstance();
final var oldKey = data.collectionKey;
final var oldCollectionInstance = data.getCollectionInstance();
data.collectionKey = null;
data.setCollectionInstance( null );

Expand All @@ -170,7 +169,7 @@ protected void resolveCollectionKey(Data data, boolean checkPreviousRow) {
return;
}
}
final CollectionPersister persister = collectionAttributeMapping.getCollectionDescriptor();
final var persister = collectionAttributeMapping.getCollectionDescriptor();
// Try to reuse the previous collection key and collection if possible
if ( checkPreviousRow && oldKey != null && areKeysEqual( oldKey.getKey(), data.collectionKeyValue ) ) {
data.collectionKey = oldKey;
Expand All @@ -187,10 +186,17 @@ private boolean areKeysEqual(Object key1, Object key2) {
return keyTypeForEqualsHashCode == null ? key1.equals( key2 ) : keyTypeForEqualsHashCode.isEqual( key1, key2 );
}

PersistentCollection<?> getCollection(CollectionInitializerData data, Object instance) {
return collectionAttributeMapping.getCollectionDescriptor().isArray()
? data.getRowProcessingState().getSession().getPersistenceContextInternal()
.getCollectionHolder( instance )
: (PersistentCollection<?>) instance;
}

@Override
protected void forEachSubInitializer(BiConsumer<Initializer<?>, RowProcessingState> consumer, InitializerData data) {
if ( collectionKeyResultAssembler != null ) {
final Initializer<?> initializer = collectionKeyResultAssembler.getInitializer();
final var initializer = collectionKeyResultAssembler.getInitializer();
if ( initializer != null ) {
consumer.accept( initializer, data.getRowProcessingState() );
}
Expand All @@ -199,8 +205,9 @@ protected void forEachSubInitializer(BiConsumer<Initializer<?>, RowProcessingSta

@Override
public @Nullable PersistentCollection<?> getCollectionInstance(Data data) {
return data.getState() == State.UNINITIALIZED || data.getState() == State.MISSING ? null :
data.getCollectionInstance();
return data.getState() == State.UNINITIALIZED || data.getState() == State.MISSING
? null
: data.getCollectionInstance();
}

@Override
Expand Down
Loading