Skip to content

Commit 5d64421

Browse files
committed
HHH-19573 Special case primitive type names for plural basic types
1 parent 90c1835 commit 5d64421

File tree

3 files changed

+34
-10
lines changed

3 files changed

+34
-10
lines changed

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

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,28 @@ public class BasicArrayType<T>
2626
public BasicArrayType(BasicType<T> 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+
switch ( elementName ) {
35+
case "boolean":
36+
case "byte":
37+
case "char":
38+
case "short":
39+
case "int":
40+
case "long":
41+
case "float":
42+
case "double":
43+
return Character.toUpperCase( elementName.charAt( 0 ) ) + elementName.substring( 1 );
44+
default:
45+
return elementName;
46+
}
47+
}
48+
49+
static String determineArrayTypeName(BasicType<?> baseDescriptor) {
50+
return determineElementTypeName( baseDescriptor ) + "[]";
3051
}
3152

3253
@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
@@ -13,6 +13,8 @@
1313
import org.hibernate.type.descriptor.jdbc.JdbcType;
1414
import org.hibernate.type.descriptor.jdbc.JdbcTypeIndicators;
1515

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

3739
private static String determineName(BasicCollectionJavaType<?, ?> collectionTypeDescriptor, BasicType<?> baseDescriptor) {
40+
final String elementTypeName = determineElementTypeName( baseDescriptor );
3841
switch ( collectionTypeDescriptor.getSemantics().getCollectionClassification() ) {
3942
case BAG:
4043
case ID_BAG:
41-
return "Collection<" + baseDescriptor.getName() + ">";
44+
return "Collection<" + elementTypeName + ">";
4245
case LIST:
43-
return "List<" + baseDescriptor.getName() + ">";
46+
return "List<" + elementTypeName + ">";
4447
case SET:
45-
return "Set<" + baseDescriptor.getName() + ">";
48+
return "Set<" + elementTypeName + ">";
4649
case SORTED_SET:
47-
return "SortedSet<" + baseDescriptor.getName() + ">";
50+
return "SortedSet<" + elementTypeName + ">";
4851
case ORDERED_SET:
49-
return "OrderedSet<" + baseDescriptor.getName() + ">";
52+
return "OrderedSet<" + elementTypeName + ">";
5053
}
5154
return null;
5255
}

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() ) {
@@ -137,7 +137,7 @@ public static class EntityOfByteArrays {
137137
//tag::basic-bytearray-example[]
138138
// mapped as VARBINARY
139139
private byte[] primitive;
140-
private Byte[] wrapper;
140+
private Byte[] boxed;
141141
@JavaType( ByteArrayJavaType.class )
142142
private Byte[] wrapperOld;
143143

@@ -154,15 +154,15 @@ public EntityOfByteArrays() {
154154
public EntityOfByteArrays(Integer id, byte[] primitive, Byte[] wrapper) {
155155
this.id = id;
156156
this.primitive = primitive;
157-
this.wrapper = wrapper;
157+
this.boxed = wrapper;
158158
this.primitiveLob = primitive;
159159
this.wrapperLob = wrapper;
160160
}
161161

162162
public EntityOfByteArrays(Integer id, byte[] primitive, Byte[] wrapper, byte[] primitiveLob, Byte[] wrapperLob) {
163163
this.id = id;
164164
this.primitive = primitive;
165-
this.wrapper = wrapper;
165+
this.boxed = wrapper;
166166
this.primitiveLob = primitiveLob;
167167
this.wrapperLob = wrapperLob;
168168
}

0 commit comments

Comments
 (0)