Skip to content

Commit 3a46cfc

Browse files
committed
HHH-19573 Special case primitive type names for plural basic types
1 parent 9b28bb1 commit 3a46cfc

File tree

4 files changed

+29
-11
lines changed

4 files changed

+29
-11
lines changed

hibernate-core/src/main/java/org/hibernate/type/BasicArrayType.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,20 @@ public class BasicArrayType<T,E>
2626
public BasicArrayType(BasicType<E> baseDescriptor, JdbcType arrayJdbcType, JavaType<T> arrayTypeDescriptor) {
2727
super( arrayJdbcType, arrayTypeDescriptor );
2828
this.baseDescriptor = baseDescriptor;
29-
this.name = baseDescriptor.getName() + "[]";
29+
this.name = determineArrayTypeName( baseDescriptor );
30+
}
31+
32+
static String determineElementTypeName(BasicType<?> baseDescriptor) {
33+
final String elementName = baseDescriptor.getName();
34+
return switch ( elementName ) {
35+
case "boolean", "byte", "char", "short", "int", "long", "float", "double" ->
36+
Character.toUpperCase( elementName.charAt( 0 ) ) + elementName.substring( 1 );
37+
default -> elementName;
38+
};
39+
}
40+
41+
static String determineArrayTypeName(BasicType<?> baseDescriptor) {
42+
return determineElementTypeName( baseDescriptor ) + "[]";
3043
}
3144

3245
@Override

hibernate-core/src/main/java/org/hibernate/type/BasicCollectionType.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import org.hibernate.type.descriptor.jdbc.JdbcType;
1313
import org.hibernate.type.descriptor.jdbc.JdbcTypeIndicators;
1414

15+
import static org.hibernate.type.BasicArrayType.determineElementTypeName;
16+
1517
/**
1618
* A type that maps between {@link java.sql.Types#ARRAY ARRAY} and {@code Collection<T>}
1719
*
@@ -34,18 +36,19 @@ public BasicCollectionType(
3436
}
3537

3638
private static String determineName(BasicCollectionJavaType<?, ?> collectionTypeDescriptor, BasicType<?> baseDescriptor) {
39+
final String elementTypeName = determineElementTypeName( baseDescriptor );
3740
switch ( collectionTypeDescriptor.getSemantics().getCollectionClassification() ) {
3841
case BAG:
3942
case ID_BAG:
40-
return "Collection<" + baseDescriptor.getName() + ">";
43+
return "Collection<" + elementTypeName + ">";
4144
case LIST:
42-
return "List<" + baseDescriptor.getName() + ">";
45+
return "List<" + elementTypeName + ">";
4346
case SET:
44-
return "Set<" + baseDescriptor.getName() + ">";
47+
return "Set<" + elementTypeName + ">";
4548
case SORTED_SET:
46-
return "SortedSet<" + baseDescriptor.getName() + ">";
49+
return "SortedSet<" + elementTypeName + ">";
4750
case ORDERED_SET:
48-
return "OrderedSet<" + baseDescriptor.getName() + ">";
51+
return "OrderedSet<" + elementTypeName + ">";
4952
}
5053
return null;
5154
}

hibernate-core/src/main/java/org/hibernate/type/ConvertedBasicArrayType.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import org.hibernate.type.descriptor.jdbc.JdbcType;
1515
import org.hibernate.type.descriptor.jdbc.JdbcTypeIndicators;
1616

17+
import static org.hibernate.type.BasicArrayType.determineArrayTypeName;
18+
1719
/**
1820
* Given a {@link BasicValueConverter} for an array type,
1921
*
@@ -48,7 +50,7 @@ public ConvertedBasicArrayType(
4850
this.jdbcValueExtractor = (ValueExtractor<T>) arrayJdbcType.getExtractor( converter.getRelationalJavaType() );
4951
this.jdbcLiteralFormatter = (JdbcLiteralFormatter<T>) arrayJdbcType.getJdbcLiteralFormatter( converter.getRelationalJavaType() );
5052
this.baseDescriptor = baseDescriptor;
51-
this.name = baseDescriptor.getName() + "[]";
53+
this.name = determineArrayTypeName( baseDescriptor );
5254
}
5355

5456
@Override

hibernate-core/src/test/java/org/hibernate/orm/test/mapping/basic/ByteArrayMappingTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public void verifyMappings(SessionFactoryScope scope) {
6363
}
6464

6565
{
66-
final BasicAttributeMapping primitive = (BasicAttributeMapping) entityDescriptor.findAttributeMapping("wrapper");
66+
final BasicAttributeMapping primitive = (BasicAttributeMapping) entityDescriptor.findAttributeMapping("boxed");
6767
final JdbcMapping jdbcMapping = primitive.getJdbcMapping();
6868
assertThat(jdbcMapping.getJavaTypeDescriptor().getJavaTypeClass(), equalTo(Byte[].class));
6969
if ( dialect.supportsStandardArrays() ) {
@@ -132,7 +132,7 @@ public static class EntityOfByteArrays {
132132
//tag::basic-bytearray-example[]
133133
// mapped as VARBINARY
134134
private byte[] primitive;
135-
private Byte[] wrapper;
135+
private Byte[] boxed;
136136
@JavaType( ByteArrayJavaType.class )
137137
private Byte[] wrapperOld;
138138

@@ -149,15 +149,15 @@ public EntityOfByteArrays() {
149149
public EntityOfByteArrays(Integer id, byte[] primitive, Byte[] wrapper) {
150150
this.id = id;
151151
this.primitive = primitive;
152-
this.wrapper = wrapper;
152+
this.boxed = wrapper;
153153
this.primitiveLob = primitive;
154154
this.wrapperLob = wrapper;
155155
}
156156

157157
public EntityOfByteArrays(Integer id, byte[] primitive, Byte[] wrapper, byte[] primitiveLob, Byte[] wrapperLob) {
158158
this.id = id;
159159
this.primitive = primitive;
160-
this.wrapper = wrapper;
160+
this.boxed = wrapper;
161161
this.primitiveLob = primitiveLob;
162162
this.wrapperLob = wrapperLob;
163163
}

0 commit comments

Comments
 (0)