54
54
import org .hibernate .usertype .DynamicParameterizedType ;
55
55
56
56
import jakarta .persistence .AttributeConverter ;
57
+ import org .hibernate .usertype .DynamicParameterizedType .ParameterType ;
57
58
58
59
import static java .lang .Boolean .parseBoolean ;
59
60
import static org .hibernate .boot .model .convert .spi .ConverterDescriptor .TYPE_NAME_PREFIX ;
@@ -914,54 +915,16 @@ public void setJpaAttributeConverterDescriptor(ConverterDescriptor descriptor) {
914
915
this .attributeConverterDescriptor = descriptor ;
915
916
}
916
917
917
- protected void createParameterImpl () {
918
- try {
919
- final String [] columnNames = new String [ columns .size () ];
920
- final Long [] columnLengths = new Long [ columns .size () ];
921
-
922
- for ( int i = 0 ; i < columns .size (); i ++ ) {
923
- final Selectable selectable = columns .get (i );
924
- if ( selectable instanceof Column column ) {
925
- columnNames [i ] = column .getName ();
926
- columnLengths [i ] = column .getLength ();
927
- }
928
- }
929
-
930
- final MemberDetails attributeMember = (MemberDetails ) typeParameters .get ( DynamicParameterizedType .XPROPERTY );
931
- // todo : not sure this works for handling @MapKeyEnumerated
932
- final Annotation [] annotations = getAnnotations ( attributeMember );
933
- typeParameters .put (
934
- DynamicParameterizedType .PARAMETER_TYPE ,
935
- new ParameterTypeImpl (
936
- classLoaderService ()
937
- .classForTypeName ( typeParameters .getProperty (DynamicParameterizedType .RETURNED_CLASS ) ),
938
- attributeMember != null ? attributeMember .getType () : null ,
939
- annotations ,
940
- table .getCatalog (),
941
- table .getSchema (),
942
- table .getName (),
943
- parseBoolean ( typeParameters .getProperty (DynamicParameterizedType .IS_PRIMARY_KEY ) ),
944
- columnNames ,
945
- columnLengths
946
- )
947
- );
948
- }
949
- catch ( ClassLoadingException e ) {
950
- throw new MappingException ( "Could not create DynamicParameterizedType for type: " + typeName , e );
951
- }
952
- }
953
-
954
918
private static final Annotation [] NO_ANNOTATIONS = new Annotation [0 ];
955
919
private static Annotation [] getAnnotations (MemberDetails memberDetails ) {
956
- final Collection <? extends Annotation > directAnnotationUsages = memberDetails == null
957
- ? null
958
- : memberDetails .getDirectAnnotationUsages ();
959
- return directAnnotationUsages == null
960
- ? NO_ANNOTATIONS
920
+ final Collection <? extends Annotation > directAnnotationUsages =
921
+ memberDetails == null ? null
922
+ : memberDetails .getDirectAnnotationUsages ();
923
+ return directAnnotationUsages == null ? NO_ANNOTATIONS
961
924
: directAnnotationUsages .toArray ( Annotation []::new );
962
925
}
963
926
964
- public DynamicParameterizedType . ParameterType makeParameterImpl () {
927
+ protected ParameterType createParameterType () {
965
928
try {
966
929
final String [] columnNames = new String [ columns .size () ];
967
930
final Long [] columnLengths = new Long [ columns .size () ];
@@ -974,28 +937,31 @@ public DynamicParameterizedType.ParameterType makeParameterImpl() {
974
937
}
975
938
}
976
939
977
- final MemberDetails attributeMember = (MemberDetails ) typeParameters .get ( DynamicParameterizedType .XPROPERTY );
978
940
// todo : not sure this works for handling @MapKeyEnumerated
979
- final Annotation [] annotations = getAnnotations ( attributeMember );
980
- return new ParameterTypeImpl (
981
- classLoaderService ()
982
- .classForTypeName ( typeParameters .getProperty (DynamicParameterizedType .RETURNED_CLASS ) ),
983
- attributeMember != null ? attributeMember .getType () : null ,
984
- annotations ,
985
- table .getCatalog (),
986
- table .getSchema (),
987
- table .getName (),
988
- parseBoolean ( typeParameters .getProperty (DynamicParameterizedType .IS_PRIMARY_KEY ) ),
989
- columnNames ,
990
- columnLengths
991
- );
941
+ return createParameterType ( columnNames , columnLengths );
992
942
}
993
943
catch ( ClassLoadingException e ) {
994
944
throw new MappingException ( "Could not create DynamicParameterizedType for type: " + typeName , e );
995
945
}
996
946
}
997
947
998
- private static final class ParameterTypeImpl implements DynamicParameterizedType .ParameterType {
948
+ private ParameterType createParameterType (String [] columnNames , Long [] columnLengths ) {
949
+ final MemberDetails attribute = (MemberDetails ) typeParameters .get ( DynamicParameterizedType .XPROPERTY );
950
+ return new ParameterTypeImpl (
951
+ classLoaderService ()
952
+ .classForTypeName ( typeParameters .getProperty ( DynamicParameterizedType .RETURNED_CLASS ) ),
953
+ attribute != null ? attribute .getType () : null ,
954
+ getAnnotations ( attribute ),
955
+ table .getCatalog (),
956
+ table .getSchema (),
957
+ table .getName (),
958
+ parseBoolean ( typeParameters .getProperty ( DynamicParameterizedType .IS_PRIMARY_KEY ) ),
959
+ columnNames ,
960
+ columnLengths
961
+ );
962
+ }
963
+
964
+ private static final class ParameterTypeImpl implements ParameterType {
999
965
1000
966
private final Class <?> returnedClass ;
1001
967
private final java .lang .reflect .Type returnedJavaType ;
0 commit comments