Skip to content

Commit 14611bd

Browse files
committed
HHH-16191 Fix issues uncovered by recent not-found fetchin changes
1 parent 1bd0180 commit 14611bd

File tree

6 files changed

+24
-4
lines changed

6 files changed

+24
-4
lines changed

hibernate-core/src/main/java/org/hibernate/boot/query/HbmResultSetMappingDescriptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,7 @@ public FetchMemento resolve(ResultSetMappingResolutionContext resolutionContext)
670670
)
671671
);
672672
}
673-
fetchable = (Fetchable) ( (FetchableContainer) fetchable ).findSubPart( propertyPathParts[i], null );
673+
fetchable = (Fetchable) ( (FetchableContainer) fetchable.getPartMappingType() ).findSubPart( propertyPathParts[i], null );
674674
navigablePath = navigablePath.append( fetchable.getFetchableName() );
675675
}
676676

hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1829,7 +1829,7 @@ else if ( fetchable instanceof Association ) {
18291829
return fetches.build();
18301830
}
18311831

1832-
protected boolean isSelectable(FetchParent fetchParent, Fetchable fetchable) {
1832+
public boolean isSelectable(FetchParent fetchParent, Fetchable fetchable) {
18331833
if ( fetchParent instanceof EmbeddableResultGraphNode ) {
18341834
return true;
18351835
}
@@ -4159,6 +4159,11 @@ public CascadeStyle[] getPropertyCascadeStyles() {
41594159
return entityMetamodel.getCascadeStyles();
41604160
}
41614161

4162+
@Override
4163+
public boolean isPropertySelectable(int propertyNumber) {
4164+
return propertySelectable[propertyNumber];
4165+
}
4166+
41624167
@Override
41634168
public final Class<?> getMappedClass() {
41644169
return this.getMappedJavaType().getJavaTypeClass();

hibernate-core/src/main/java/org/hibernate/persister/entity/EntityPersister.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,10 @@ void update(
674674
*/
675675
CascadeStyle[] getPropertyCascadeStyles();
676676

677+
default boolean isPropertySelectable(int propertyNumber) {
678+
return true;
679+
}
680+
677681
/**
678682
* Get the identifier type
679683
*/

hibernate-core/src/main/java/org/hibernate/query/results/DomainResultCreationStateImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.hibernate.metamodel.mapping.NonAggregatedIdentifierMapping;
3030
import org.hibernate.metamodel.mapping.internal.BasicValuedCollectionPart;
3131
import org.hibernate.metamodel.mapping.internal.SingleAttributeIdentifierMapping;
32+
import org.hibernate.persister.entity.AbstractEntityPersister;
3233
import org.hibernate.spi.EntityIdentifierNavigablePath;
3334
import org.hibernate.spi.NavigablePath;
3435
import org.hibernate.query.results.dynamic.DynamicFetchBuilderLegacy;
@@ -428,6 +429,11 @@ public ImmutableFetchList visitFetches(FetchParent fetchParent) {
428429

429430
private Consumer<Fetchable> createFetchableConsumer(FetchParent fetchParent, ImmutableFetchList.Builder fetches) {
430431
return fetchable -> {
432+
final FetchableContainer parentMappingType = fetchParent.getReferencedMappingContainer();
433+
if ( parentMappingType instanceof AbstractEntityPersister
434+
&& !( ( (AbstractEntityPersister) parentMappingType ).isSelectable( fetchParent, fetchable ) ) ) {
435+
return;
436+
}
431437
final String fetchableName = fetchable.getFetchableName();
432438
Map.Entry<String, NavigablePath> currentEntry;
433439
if ( relativePathStack.isEmpty() ) {

hibernate-core/src/main/java/org/hibernate/query/results/dynamic/DynamicResultBuilderEntityStandard.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ private <T> T buildResultOrFetch(
187187
final NavigablePath elementNavigablePath;
188188
if ( fetchable instanceof PluralAttributeMapping ) {
189189
collectionTableGroup = fromClauseAccess.getTableGroup( navigablePath );
190-
elementNavigablePath = navigablePath.append( fetchable.getPartName() );
190+
elementNavigablePath = navigablePath.append( CollectionPart.Nature.ELEMENT.getName() );
191191
}
192192
else {
193193
collectionTableGroup = null;

hibernate-core/src/main/java/org/hibernate/query/sql/internal/ResultSetMappingProcessor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,12 @@ private DynamicResultBuilderEntityStandard createSuffixedResultBuilder(
323323
resultBuilderEntity.addProperty( loadable.getIdentifierPropertyName(), identifierAliases );
324324
}
325325

326-
for ( String propertyName : loadable.getPropertyNames() ) {
326+
final String[] propertyNames = loadable.getPropertyNames();
327+
for ( int i = 0; i < propertyNames.length; i++ ) {
328+
if ( !loadable.isPropertySelectable( i ) ) {
329+
continue;
330+
}
331+
final String propertyName = propertyNames[i];
327332
final String[] columnAliases = loadable.getSubclassPropertyColumnAliases( propertyName, suffix );
328333
final Type propertyType = loadable.getPropertyType( propertyName );
329334
addFetchBuilder(

0 commit comments

Comments
 (0)