Skip to content

Commit 4191fb6

Browse files
committed
HHH-19573 Special case primitive type names for plural basic types
1 parent 80ee837 commit 4191fb6

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
@@ -28,7 +28,20 @@ public class BasicArrayType<T,E>
2828
public BasicArrayType(BasicType<E> baseDescriptor, JdbcType arrayJdbcType, JavaType<T> arrayTypeDescriptor) {
2929
super( arrayJdbcType, arrayTypeDescriptor );
3030
this.baseDescriptor = baseDescriptor;
31-
this.name = baseDescriptor.getName() + "[]";
31+
this.name = determineArrayTypeName( baseDescriptor );
32+
}
33+
34+
static String determineElementTypeName(BasicType<?> baseDescriptor) {
35+
final String elementName = baseDescriptor.getName();
36+
return switch ( elementName ) {
37+
case "boolean", "byte", "char", "short", "int", "long", "float", "double" ->
38+
Character.toUpperCase( elementName.charAt( 0 ) ) + elementName.substring( 1 );
39+
default -> elementName;
40+
};
41+
}
42+
43+
static String determineArrayTypeName(BasicType<?> baseDescriptor) {
44+
return determineElementTypeName( baseDescriptor ) + "[]";
3245
}
3346

3447
@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
@@ -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.determineElementTypeName;
18+
1719
/**
1820
* A type that maps between {@link java.sql.Types#ARRAY ARRAY} and {@code Collection<T>}
1921
*
@@ -36,18 +38,19 @@ public BasicCollectionType(
3638
}
3739

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

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

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

19+
import static org.hibernate.type.BasicArrayType.determineArrayTypeName;
20+
1921
/**
2022
* Given a {@link BasicValueConverter} for an array type,
2123
*
@@ -50,7 +52,7 @@ public ConvertedBasicArrayType(
5052
this.jdbcValueExtractor = (ValueExtractor<T>) arrayJdbcType.getExtractor( converter.getRelationalJavaType() );
5153
this.jdbcLiteralFormatter = (JdbcLiteralFormatter<T>) arrayJdbcType.getJdbcLiteralFormatter( converter.getRelationalJavaType() );
5254
this.baseDescriptor = baseDescriptor;
53-
this.name = baseDescriptor.getName() + "[]";
55+
this.name = determineArrayTypeName( baseDescriptor );
5456
}
5557

5658
@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
@@ -65,7 +65,7 @@ public void verifyMappings(SessionFactoryScope scope) {
6565
}
6666

6767
{
68-
final BasicAttributeMapping primitive = (BasicAttributeMapping) entityDescriptor.findAttributeMapping("wrapper");
68+
final BasicAttributeMapping primitive = (BasicAttributeMapping) entityDescriptor.findAttributeMapping("boxed");
6969
final JdbcMapping jdbcMapping = primitive.getJdbcMapping();
7070
assertThat(jdbcMapping.getJavaTypeDescriptor().getJavaTypeClass(), equalTo(Byte[].class));
7171
if ( dialect.supportsStandardArrays() ) {
@@ -134,7 +134,7 @@ public static class EntityOfByteArrays {
134134
//tag::basic-bytearray-example[]
135135
// mapped as VARBINARY
136136
private byte[] primitive;
137-
private Byte[] wrapper;
137+
private Byte[] boxed;
138138
@JavaType( ByteArrayJavaType.class )
139139
private Byte[] wrapperOld;
140140

@@ -151,15 +151,15 @@ public EntityOfByteArrays() {
151151
public EntityOfByteArrays(Integer id, byte[] primitive, Byte[] wrapper) {
152152
this.id = id;
153153
this.primitive = primitive;
154-
this.wrapper = wrapper;
154+
this.boxed = wrapper;
155155
this.primitiveLob = primitive;
156156
this.wrapperLob = wrapper;
157157
}
158158

159159
public EntityOfByteArrays(Integer id, byte[] primitive, Byte[] wrapper, byte[] primitiveLob, Byte[] wrapperLob) {
160160
this.id = id;
161161
this.primitive = primitive;
162-
this.wrapper = wrapper;
162+
this.boxed = wrapper;
163163
this.primitiveLob = primitiveLob;
164164
this.wrapperLob = wrapperLob;
165165
}

0 commit comments

Comments
 (0)