HHH-18511 ArrayIndexOutOfBoundsException in ImmutableFetchList
This commit is contained in:
parent
21a69c682e
commit
d6ab2fd110
|
@ -61,6 +61,11 @@ public class CompoundNaturalIdMapping extends AbstractNaturalIdMapping implement
|
||||||
private final List<SingularAttributeMapping> attributes;
|
private final List<SingularAttributeMapping> attributes;
|
||||||
|
|
||||||
private List<JdbcMapping> jdbcMappings;
|
private List<JdbcMapping> jdbcMappings;
|
||||||
|
/*
|
||||||
|
This value is used to determine the size of the array used to create the ImmutableFetchList (see org.hibernate.sql.results.graph.internal.ImmutableFetchList#Builder)
|
||||||
|
The Fetch is inserted into the array at a position corresponding to its Fetchable key value.
|
||||||
|
*/
|
||||||
|
private final int maxFetchableKeyIndex;
|
||||||
|
|
||||||
public CompoundNaturalIdMapping(
|
public CompoundNaturalIdMapping(
|
||||||
EntityMappingType declaringType,
|
EntityMappingType declaringType,
|
||||||
|
@ -69,6 +74,14 @@ public class CompoundNaturalIdMapping extends AbstractNaturalIdMapping implement
|
||||||
super( declaringType, isMutable( attributes ) );
|
super( declaringType, isMutable( attributes ) );
|
||||||
this.attributes = attributes;
|
this.attributes = attributes;
|
||||||
|
|
||||||
|
int maxIndex = 0;
|
||||||
|
for ( SingularAttributeMapping attribute : attributes ) {
|
||||||
|
if ( attribute.getFetchableKey() > maxIndex ) {
|
||||||
|
maxIndex = attribute.getFetchableKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.maxFetchableKeyIndex = maxIndex + 1;
|
||||||
|
|
||||||
creationProcess.registerInitializationCallback(
|
creationProcess.registerInitializationCallback(
|
||||||
"Determine compound natural-id JDBC mappings ( " + declaringType.getEntityName() + ")",
|
"Determine compound natural-id JDBC mappings ( " + declaringType.getEntityName() + ")",
|
||||||
() -> {
|
() -> {
|
||||||
|
@ -531,6 +544,10 @@ public class CompoundNaturalIdMapping extends AbstractNaturalIdMapping implement
|
||||||
attributes.forEach( consumer );
|
attributes.forEach( consumer );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getNumberOfFetchableKeys() {
|
||||||
|
return maxFetchableKeyIndex;
|
||||||
|
}
|
||||||
|
|
||||||
public static class DomainResultImpl implements DomainResult<Object[]>, FetchParent {
|
public static class DomainResultImpl implements DomainResult<Object[]>, FetchParent {
|
||||||
private final NavigablePath navigablePath;
|
private final NavigablePath navigablePath;
|
||||||
|
|
Loading…
Reference in New Issue