diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/convert/internal/NamedEnumValueConverter.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/convert/internal/NamedEnumValueConverter.java index c67aedcd02..7776b2eb2c 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/convert/internal/NamedEnumValueConverter.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/convert/internal/NamedEnumValueConverter.java @@ -6,6 +6,8 @@ */ package org.hibernate.metamodel.model.convert.internal; +import java.io.IOException; +import java.io.ObjectInputStream; import java.io.Serializable; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -31,18 +33,17 @@ public class NamedEnumValueConverter implements EnumValueConvert private final EnumJavaTypeDescriptor enumJavaDescriptor; - private final transient ValueExtractor valueExtractor; + private transient ValueExtractor valueExtractor; - private final transient ValueBinder valueBinder; + private transient ValueBinder valueBinder; public NamedEnumValueConverter(EnumJavaTypeDescriptor enumJavaDescriptor) { this.enumJavaDescriptor = enumJavaDescriptor; - this.valueExtractor = VarcharTypeDescriptor.INSTANCE.getExtractor( enumJavaDescriptor ); - this.valueBinder = VarcharTypeDescriptor.INSTANCE.getBinder( StringTypeDescriptor.INSTANCE ); + this.valueExtractor = createValueExtractor( enumJavaDescriptor ); + this.valueBinder = createValueBinder(); } @Override - @SuppressWarnings("unchecked") public E toDomainValue(String relationalForm) { return enumJavaDescriptor.fromName( relationalForm ); } @@ -79,4 +80,19 @@ public class NamedEnumValueConverter implements EnumValueConvert public String toSqlLiteral(Object value) { return String.format( Locale.ROOT, "'%s'", ( (E) value ).name() ); } + + private static ValueExtractor createValueExtractor(EnumJavaTypeDescriptor enumJavaDescriptor) { + return VarcharTypeDescriptor.INSTANCE.getExtractor( enumJavaDescriptor ); + } + + private static ValueBinder createValueBinder() { + return VarcharTypeDescriptor.INSTANCE.getBinder( StringTypeDescriptor.INSTANCE ); + } + + private void readObject(ObjectInputStream stream) throws ClassNotFoundException, IOException { + stream.defaultReadObject(); + + this.valueExtractor = createValueExtractor( enumJavaDescriptor ); + this.valueBinder = createValueBinder(); + } } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/convert/internal/OrdinalEnumValueConverter.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/convert/internal/OrdinalEnumValueConverter.java index 6099efcfb3..0a4c00489d 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/convert/internal/OrdinalEnumValueConverter.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/convert/internal/OrdinalEnumValueConverter.java @@ -6,6 +6,8 @@ */ package org.hibernate.metamodel.model.convert.internal; +import java.io.IOException; +import java.io.ObjectInputStream; import java.io.Serializable; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -29,18 +31,17 @@ public class OrdinalEnumValueConverter implements EnumValueConve private final EnumJavaTypeDescriptor enumJavaDescriptor; - private final transient ValueExtractor valueExtractor; + private transient ValueExtractor valueExtractor; - private final transient ValueBinder valueBinder; + private transient ValueBinder valueBinder; public OrdinalEnumValueConverter(EnumJavaTypeDescriptor enumJavaDescriptor) { this.enumJavaDescriptor = enumJavaDescriptor; - this.valueExtractor = IntegerTypeDescriptor.INSTANCE.getExtractor( enumJavaDescriptor ); - this.valueBinder = IntegerTypeDescriptor.INSTANCE.getBinder( org.hibernate.type.descriptor.java.IntegerTypeDescriptor.INSTANCE ); + this.valueExtractor = createValueExtractor( enumJavaDescriptor ); + this.valueBinder = createValueBinder(); } @Override - @SuppressWarnings("unchecked") public E toDomainValue(Integer relationalForm) { return enumJavaDescriptor.fromOrdinal( relationalForm ); } @@ -77,4 +78,19 @@ public class OrdinalEnumValueConverter implements EnumValueConve public String toSqlLiteral(Object value) { return Integer.toString( ( (E) value ).ordinal() ); } + + private static ValueExtractor createValueExtractor(EnumJavaTypeDescriptor enumJavaDescriptor) { + return IntegerTypeDescriptor.INSTANCE.getExtractor( enumJavaDescriptor ); + } + + private static ValueBinder createValueBinder() { + return IntegerTypeDescriptor.INSTANCE.getBinder( org.hibernate.type.descriptor.java.IntegerTypeDescriptor.INSTANCE ); + } + + private void readObject(ObjectInputStream stream) throws ClassNotFoundException, IOException { + stream.defaultReadObject(); + + this.valueExtractor = createValueExtractor( enumJavaDescriptor ); + this.valueBinder = createValueBinder(); + } }