Skip to content

Commit 689414e

Browse files
committed
improve some error messages
also, tell StringType know how to convert ints and longs
1 parent 8ddbb03 commit 689414e

File tree

9 files changed

+34
-9
lines changed

9 files changed

+34
-9
lines changed

hibernate-core/src/main/java/org/hibernate/loader/internal/IdentifierLoadAccessImpl.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,14 @@ protected final T doLoad(Object id) {
173173

174174
final JpaCompliance jpaCompliance = session.getFactory().getSessionFactoryOptions().getJpaCompliance();
175175
if ( ! jpaCompliance.isLoadByIdComplianceEnabled() ) {
176-
id = entityPersister.getIdentifierMapping().getJavaType().coerce( id, this );
176+
try {
177+
id = entityPersister.getIdentifierMapping().getJavaType().coerce( id, this );
178+
}
179+
catch ( Exception e ) {
180+
throw new IllegalArgumentException( "Argument '" + id
181+
+ "' could not be converted to the identifier type of entity '" + entityPersister.getEntityName() + "'"
182+
+ " [" + e.getMessage() + "]", e );
183+
}
177184
}
178185

179186
String entityName = entityPersister.getEntityName();

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/ByteJavaType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ public <X> Byte coerce(X value, CoercionContext coercionContext) {
169169
throw new CoercionException(
170170
String.format(
171171
Locale.ROOT,
172-
"Cannot coerce value `%s` [%s] as Byte",
172+
"Cannot coerce value '%s' [%s] to Byte",
173173
value,
174174
value.getClass().getName()
175175
)

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/DoubleJavaType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ public <X> Double coerce(X value, CoercionContext coercionContext) {
201201
throw new CoercionException(
202202
String.format(
203203
Locale.ROOT,
204-
"Cannot coerce value `%s` [%s] as Double",
204+
"Cannot coerce value '%s' [%s] to Double",
205205
value,
206206
value.getClass().getName()
207207
)

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/FloatJavaType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ public <X> Float coerce(X value, CoercionContext coercionContext) {
196196
throw new CoercionException(
197197
String.format(
198198
Locale.ROOT,
199-
"Cannot coerce value `%s` [%s] as Float",
199+
"Cannot coerce value '%s' [%s] to Float",
200200
value,
201201
value.getClass().getName()
202202
)

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/IntegerJavaType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ public Integer coerce(Object value, CoercionContext coercionContext) {
187187
throw new CoercionException(
188188
String.format(
189189
Locale.ROOT,
190-
"Cannot coerce value `%s` [%s] as Integer",
190+
"Cannot coerce value '%s' [%s] to Integer",
191191
value,
192192
value.getClass().getName()
193193
)

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JavaTypeHelper.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@
1515
public class JavaTypeHelper {
1616
protected static <T extends JavaType<?>> HibernateException unknownUnwrap(Class<?> sourceType, Class<?> targetType, T jtd) {
1717
throw new HibernateException(
18-
"Unknown unwrap conversion requested: " + sourceType.getName() + " to " + targetType.getName() + " : `" + jtd.getClass().getName() + "` (" + jtd.getJavaTypeClass().getName() + ")"
18+
"Could not convert '" + sourceType.getName()
19+
+ "' to '" + targetType.getName()
20+
+ "' using '" + jtd.getClass().getName() + "' to unwrap"
1921
);
2022
}
2123

2224
protected static <T extends JavaType<?>> HibernateException unknownWrap(Class<?> valueType, Class<?> sourceType, T jtd) {
2325
throw new HibernateException(
24-
"Unknown wrap conversion requested: " + valueType.getName() + " to " + sourceType.getName() + " : `" + jtd.getClass().getName() + "` (" + jtd.getJavaTypeClass().getName() + ")"
26+
"Could not convert '" + valueType.getName()
27+
+ "' to '" + sourceType.getName()
28+
+ "' using '" + jtd.getClass().getName() + "' to wrap"
2529
);
2630
}
2731

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/LongJavaType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ public <X> Long coerce(X value, CoercionContext coercionContext) {
154154
throw new CoercionException(
155155
String.format(
156156
Locale.ROOT,
157-
"Cannot coerce value `%s` [%s] as Long",
157+
"Cannot coerce value '%s' [%s] to Long",
158158
value,
159159
value.getClass().getName()
160160
)

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/ShortJavaType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ public Short coerce(Object value, CoercionContext coercionContext) {
177177
throw new CoercionException(
178178
String.format(
179179
Locale.ROOT,
180-
"Cannot coerce value `%s` [%s] as Short",
180+
"Cannot coerce value '%s' [%s] to Short",
181181
value,
182182
value.getClass().getName()
183183
)

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/StringJavaType.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,14 @@ public <X> X unwrap(String value, Class<X> type, WrapperOptions options) {
7979
if ( Clob.class.isAssignableFrom( type ) ) {
8080
return (X) options.getLobCreator().createClob( value );
8181
}
82+
if ( Integer.class.isAssignableFrom( type ) ) {
83+
Integer parsed = Integer.parseInt( value );
84+
return (X) parsed;
85+
}
86+
if ( Long.class.isAssignableFrom( type ) ) {
87+
Long parsed = Long.parseLong( value );
88+
return (X) parsed;
89+
}
8290

8391
throw unknownUnwrap( type );
8492
}
@@ -99,6 +107,12 @@ public <X> String wrap(X value, WrapperOptions options) {
99107
if (value instanceof Clob) {
100108
return DataHelper.extractString( (Clob) value );
101109
}
110+
if (value instanceof Integer) {
111+
return value.toString();
112+
}
113+
if (value instanceof Long) {
114+
return value.toString();
115+
}
102116

103117
throw unknownWrap( value.getClass() );
104118
}

0 commit comments

Comments
 (0)