@@ -1059,19 +1059,16 @@ private void handleNaturalIdBinding(
10591059 NaturalIdMutability naturalIdMutability) {
10601060 if ( naturalIdMutability != NaturalIdMutability.NOT_NATURAL_ID ) {
10611061 attributeBinding.setNaturalIdentifier( true );
1062-
10631062 if ( naturalIdMutability == NaturalIdMutability.IMMUTABLE ) {
10641063 attributeBinding.setUpdatable( false );
10651064 }
1066-
10671065 final var metadataCollector = mappingDocument.getMetadataCollector();
10681066 final String entityName = entityBinding.getEntityName();
10691067 var ukBinder = metadataCollector.locateNaturalIdUniqueKeyBinder( entityName );
10701068 if ( ukBinder == null ) {
10711069 ukBinder = new NaturalIdUniqueKeyBinderImpl( mappingDocument, entityBinding );
10721070 metadataCollector.registerNaturalIdUniqueKeyBinder( entityName, ukBinder );
10731071 }
1074-
10751072 ukBinder.addAttributeBinding( attributeBinding );
10761073 }
10771074 }
@@ -1081,12 +1078,10 @@ private Property createPluralAttribute(
10811078 PluralAttributeSource attributeSource,
10821079 PersistentClass entityDescriptor) {
10831080 final Collection collectionBinding;
1084-
10851081 if ( attributeSource instanceof PluralAttributeSourceListImpl pluralAttributeSourceList ) {
10861082 final var list = new org.hibernate.mapping.List(sourceDocument, entityDescriptor);
10871083 collectionBinding = list;
10881084 bindCollectionMetadata( sourceDocument, attributeSource, collectionBinding );
1089-
10901085 registerSecondPass(
10911086 new PluralAttributeListSecondPass( sourceDocument, pluralAttributeSourceList, list ),
10921087 sourceDocument
@@ -1095,7 +1090,6 @@ private Property createPluralAttribute(
10951090 else if ( attributeSource instanceof PluralAttributeSourceSetImpl ) {
10961091 collectionBinding = new Set( sourceDocument, entityDescriptor );
10971092 bindCollectionMetadata( sourceDocument, attributeSource, collectionBinding );
1098-
10991093 registerSecondPass(
11001094 new PluralAttributeSetSecondPass( sourceDocument, attributeSource, collectionBinding ),
11011095 sourceDocument
@@ -1105,7 +1099,6 @@ else if ( attributeSource instanceof PluralAttributeSourceMapImpl pluralAttribut
11051099 final var map = new org.hibernate.mapping.Map( sourceDocument, entityDescriptor );
11061100 collectionBinding = map;
11071101 bindCollectionMetadata( sourceDocument, attributeSource, collectionBinding );
1108-
11091102 registerSecondPass(
11101103 new PluralAttributeMapSecondPass( sourceDocument, pluralAttributeSourceMap, map ),
11111104 sourceDocument
@@ -1114,7 +1107,6 @@ else if ( attributeSource instanceof PluralAttributeSourceMapImpl pluralAttribut
11141107 else if ( attributeSource instanceof PluralAttributeSourceBagImpl ) {
11151108 collectionBinding = new Bag( sourceDocument, entityDescriptor );
11161109 bindCollectionMetadata( sourceDocument, attributeSource, collectionBinding );
1117-
11181110 registerSecondPass(
11191111 new PluralAttributeBagSecondPass( sourceDocument, attributeSource, collectionBinding ),
11201112 sourceDocument
@@ -1123,7 +1115,6 @@ else if ( attributeSource instanceof PluralAttributeSourceBagImpl ) {
11231115 else if ( attributeSource instanceof PluralAttributeSourceIdBagImpl ) {
11241116 collectionBinding = new IdentifierBag( sourceDocument, entityDescriptor );
11251117 bindCollectionMetadata( sourceDocument, attributeSource, collectionBinding );
1126-
11271118 registerSecondPass(
11281119 new PluralAttributeIdBagSecondPass( sourceDocument, attributeSource, collectionBinding ),
11291120 sourceDocument
@@ -1133,9 +1124,7 @@ else if ( attributeSource instanceof PluralAttributeSourceArrayImpl arraySource
11331124 final var array = new Array(sourceDocument, entityDescriptor);
11341125 collectionBinding = array;
11351126 bindCollectionMetadata( sourceDocument, attributeSource, collectionBinding );
1136-
11371127 array.setElementClassName( sourceDocument.qualifyClassName( arraySource.getElementClass() ) );
1138-
11391128 registerSecondPass(
11401129 new PluralAttributeArraySecondPass( sourceDocument, arraySource, array ),
11411130 sourceDocument
@@ -1145,7 +1134,6 @@ else if ( attributeSource instanceof PluralAttributeSourcePrimitiveArrayImpl plu
11451134 final var primitiveArray = new PrimitiveArray( sourceDocument, entityDescriptor );
11461135 collectionBinding = primitiveArray;
11471136 bindCollectionMetadata( sourceDocument, attributeSource, collectionBinding );
1148-
11491137 registerSecondPass(
11501138 new PluralAttributePrimitiveArraySecondPass(
11511139 sourceDocument,
@@ -1161,16 +1149,17 @@ else if ( attributeSource instanceof PluralAttributeSourcePrimitiveArrayImpl plu
11611149 );
11621150 }
11631151
1164- sourceDocument.getMetadataCollector().addCollectionBinding( collectionBinding );
1152+ sourceDocument.getMetadataCollector()
1153+ .addCollectionBinding( collectionBinding );
11651154
11661155 final var attribute = new Property();
11671156 attribute.setValue( collectionBinding );
11681157 bindProperty( sourceDocument, attributeSource, attribute );
1169-
11701158 return attribute;
11711159 }
11721160
1173- private void bindCollectionMetadata(MappingDocument mappingDocument, PluralAttributeSource source, Collection binding) {
1161+ private void bindCollectionMetadata(
1162+ MappingDocument mappingDocument, PluralAttributeSource source, Collection binding) {
11741163 binding.setRole( source.getAttributeRole().getFullPath() );
11751164 binding.setInverse( source.isInverse() );
11761165 binding.setMutable( source.isMutable() );
@@ -1186,40 +1175,11 @@ private void bindCollectionMetadata(MappingDocument mappingDocument, PluralAttri
11861175
11871176 applyCaching( mappingDocument, source.getCaching(), binding );
11881177
1189- // bind the collection type info
1190- String typeName = source.getTypeInformation().getName();
1191- final Map<String,String> typeParameters = new HashMap<>();
1192- if ( typeName != null ) {
1193- // see if there is a corresponding type-def
1194- final var typeDefinition =
1195- mappingDocument.getMetadataCollector().getTypeDefinition( typeName );
1196- if ( typeDefinition != null ) {
1197- typeName = typeDefinition.getTypeImplementorClass().getName();
1198- if ( typeDefinition.getParameters() != null ) {
1199- typeParameters.putAll( typeDefinition.getParameters() );
1200- }
1201- }
1202- else {
1203- // it could be an unqualified class name, in which case we should qualify
1204- // it with the implicit package name for this context, if one.
1205- typeName = mappingDocument.qualifyClassName( typeName );
1206- }
1207- }
1208- if ( source.getTypeInformation().getParameters() != null ) {
1209- typeParameters.putAll( source.getTypeInformation().getParameters() );
1210- }
1211-
1212- binding.setTypeName( typeName );
1213- binding.setTypeParameters( typeParameters );
1178+ bindCollectionType( mappingDocument, source, binding );
12141179
12151180 final var fetchCharacteristics = source.getFetchCharacteristics();
1216- if ( fetchCharacteristics.getFetchTiming() == FetchTiming.DELAYED ) {
1217- binding.setLazy( true );
1218- binding.setExtraLazy( fetchCharacteristics.isExtraLazy() );
1219- }
1220- else {
1221- binding.setLazy( false );
1222- }
1181+ binding.setLazy( fetchCharacteristics.getFetchTiming() == FetchTiming.DELAYED );
1182+ binding.setExtraLazy( fetchCharacteristics.isExtraLazy() );
12231183
12241184 setupFetching( source, binding );
12251185
@@ -1230,23 +1190,16 @@ private void bindCollectionMetadata(MappingDocument mappingDocument, PluralAttri
12301190 binding.setLoaderName( source.getCustomLoaderName() );
12311191 bindCustomSql( source, binding );
12321192
1233- if ( source instanceof Sortable sortable ) {
1234- if ( sortable.isSorted() ) {
1235- binding.setSorted( true );
1236- final String comparatorName = sortable.getComparatorName();
1237- if ( !comparatorName.equals( "natural" ) ) {
1238- binding.setComparatorClassName( comparatorName );
1239- }
1240- }
1241- else {
1242- binding.setSorted( false );
1193+ if ( source instanceof Sortable sortable && sortable.isSorted() ) {
1194+ binding.setSorted( true );
1195+ final String comparatorName = sortable.getComparatorName();
1196+ if ( !comparatorName.equals( "natural" ) ) {
1197+ binding.setComparatorClassName( comparatorName );
12431198 }
12441199 }
12451200
1246- if ( source instanceof Orderable orderable ) {
1247- if ( orderable.isOrdered() ) {
1248- binding.setOrderBy( orderable.getOrder() );
1249- }
1201+ if ( source instanceof Orderable orderable && orderable.isOrdered() ) {
1202+ binding.setOrderBy( orderable.getOrder() );
12501203 }
12511204
12521205 final String cascadeStyle = source.getCascadeStyleName();
@@ -1265,6 +1218,41 @@ private void bindCollectionMetadata(MappingDocument mappingDocument, PluralAttri
12651218 }
12661219 }
12671220
1221+ private static void bindCollectionType(
1222+ MappingDocument mappingDocument, PluralAttributeSource source, Collection binding) {
1223+ // bind the collection type info
1224+ final String explicitTypeName = source.getTypeInformation().getName();
1225+ final Map<String,String> typeParameters = new HashMap<>();
1226+ final String typeName;
1227+ if ( explicitTypeName != null ) {
1228+ // see if there is a corresponding type-def
1229+ final var typeDefinition =
1230+ mappingDocument.getMetadataCollector()
1231+ .getTypeDefinition( explicitTypeName );
1232+ if ( typeDefinition != null ) {
1233+ typeName = typeDefinition.getTypeImplementorClass().getName();
1234+ final var parameters = typeDefinition.getParameters();
1235+ if ( parameters != null ) {
1236+ typeParameters.putAll( parameters );
1237+ }
1238+ }
1239+ else {
1240+ // it could be an unqualified class name, in which case qualify
1241+ // it with the implicit package name for this context, if one.
1242+ typeName = mappingDocument.qualifyClassName( explicitTypeName );
1243+ }
1244+ }
1245+ else {
1246+ typeName = null;
1247+ }
1248+ final var parameters = source.getTypeInformation().getParameters();
1249+ if ( parameters != null ) {
1250+ typeParameters.putAll( parameters );
1251+ }
1252+ binding.setTypeName( typeName );
1253+ binding.setTypeParameters( typeParameters );
1254+ }
1255+
12681256 private static void bindCustomSql(PluralAttributeSource source, Collection binding) {
12691257 if ( source.getCustomSqlInsert() != null ) {
12701258 binding.setCustomSQLInsert(
@@ -1298,26 +1286,19 @@ private static void bindCustomSql(PluralAttributeSource source, Collection bindi
12981286
12991287 private static void setupFetching(PluralAttributeSource source, Collection binding) {
13001288 final var fetchCharacteristics = source.getFetchCharacteristics();
1301- switch ( fetchCharacteristics.getFetchStyle() ) {
1302- case SELECT:
1303- binding.setFetchMode( FetchMode.SELECT );
1304- break;
1305- case JOIN:
1306- binding.setFetchMode( FetchMode.JOIN );
1307- break;
1289+ final var fetchStyle = fetchCharacteristics.getFetchStyle();
1290+ binding.setFetchMode( switch ( fetchStyle ) {
1291+ case SELECT, BATCH, SUBSELECT -> FetchMode.SELECT;
1292+ case JOIN -> FetchMode.JOIN;
1293+ } );
1294+ switch ( fetchStyle ) {
13081295 case BATCH:
1309- binding.setFetchMode( FetchMode.SELECT );
13101296 binding.setBatchSize( fetchCharacteristics.getBatchSize() );
13111297 break;
13121298 case SUBSELECT:
1313- binding.setFetchMode( FetchMode.SELECT );
13141299 binding.setSubselectLoadable( true );
1315- // todo : this could totally be done using a "symbol map" approach
13161300 binding.getOwner().setSubselectLoadableCollections( true );
13171301 break;
1318- default:
1319- throw new AssertionFailure( "Unexpected FetchStyle : "
1320- + fetchCharacteristics.getFetchStyle().name() );
13211302 }
13221303 }
13231304
@@ -2565,17 +2546,18 @@ public TypeResolution(String typeName, Map<String,String> parameters) {
25652546 private static TypeResolution resolveType(
25662547 MappingDocument sourceDocument,
25672548 HibernateTypeSource typeSource) {
2568- if ( StringHelper.isEmpty( typeSource.getName() ) ) {
2549+ final String typeSourceName = typeSource.getName();
2550+ if ( StringHelper.isEmpty( typeSourceName ) ) {
25692551 return null;
25702552 }
25712553
25722554 final var typeDefinition =
25732555 sourceDocument.getMetadataCollector()
2574- .getTypeDefinition( typeSource.getName() );
2556+ .getTypeDefinition( typeSourceName );
25752557 final Map<String,String> typeParameters = new HashMap<>();
25762558 final String typeName;
25772559 if ( typeDefinition == null ) {
2578- typeName = typeSource.getName() ;
2560+ typeName = typeSourceName ;
25792561 }
25802562 else {
25812563 // the explicit name referred to a type-def
@@ -2585,13 +2567,11 @@ private static TypeResolution resolveType(
25852567 typeParameters.putAll( parameters );
25862568 }
25872569 }
2588-
25892570 // parameters on the property mapping should override parameters in the type-def
25902571 final var parameters = typeSource.getParameters();
25912572 if ( parameters != null ) {
25922573 typeParameters.putAll( parameters );
25932574 }
2594-
25952575 return new TypeResolution( typeName, typeParameters );
25962576 }
25972577
0 commit comments