diff --git a/hibernate-core/src/main/java/org/hibernate/exception/internal/SQLStateConversionDelegate.java b/hibernate-core/src/main/java/org/hibernate/exception/internal/SQLStateConversionDelegate.java index da51bfbec09b..87637185bb1e 100644 --- a/hibernate-core/src/main/java/org/hibernate/exception/internal/SQLStateConversionDelegate.java +++ b/hibernate-core/src/main/java/org/hibernate/exception/internal/SQLStateConversionDelegate.java @@ -80,7 +80,7 @@ public SQLStateConversionDelegate(ConversionContext conversionContext) { return new JDBCConnectionException( message, sqlException, sql ); case "21", // "cardinality violation" - "22": // "data exception" (22001 is string too long) + "22": // "data exception" (22001 is string too long; 22003 is numeric value out of range) return new DataException( message, sqlException, sql ); case "28": // "authentication failure" diff --git a/hibernate-core/src/main/java/org/hibernate/jpa/spi/NativeQueryConstructorTransformer.java b/hibernate-core/src/main/java/org/hibernate/jpa/spi/NativeQueryConstructorTransformer.java index c45bda1919ef..f65b2bcb84c3 100644 --- a/hibernate-core/src/main/java/org/hibernate/jpa/spi/NativeQueryConstructorTransformer.java +++ b/hibernate-core/src/main/java/org/hibernate/jpa/spi/NativeQueryConstructorTransformer.java @@ -24,7 +24,7 @@ public class NativeQueryConstructorTransformer implements TupleTransformer { private final Class resultClass; - private Constructor constructor; + private transient Constructor constructor; private Constructor constructor(Object[] elements) { if ( constructor == null ) { @@ -75,4 +75,16 @@ public T transformTuple(Object[] tuple, String[] aliases) { throw new InstantiationException( "Cannot instantiate query result type", resultClass, e ); } } + + @Override + public boolean equals(Object obj) { + return obj instanceof NativeQueryConstructorTransformer that + && this.resultClass == that.resultClass; + // should be safe to ignore the cached constructor here + } + + @Override + public int hashCode() { + return resultClass.hashCode(); + } }