HHH-16479 Generic enum in @MappedSuperclass fails with java.lang.IllegalArgumentException: Named type [...] did not implement BasicType nor UserType
This commit is contained in:
parent
31c5be55ed
commit
23e2b40ae8
|
@ -29,6 +29,7 @@ import org.hibernate.resource.beans.spi.ManagedBean;
|
||||||
import org.hibernate.resource.beans.spi.ManagedBeanRegistry;
|
import org.hibernate.resource.beans.spi.ManagedBeanRegistry;
|
||||||
import org.hibernate.type.BasicType;
|
import org.hibernate.type.BasicType;
|
||||||
import org.hibernate.type.CustomType;
|
import org.hibernate.type.CustomType;
|
||||||
|
import org.hibernate.type.JavaObjectType;
|
||||||
import org.hibernate.type.SerializableType;
|
import org.hibernate.type.SerializableType;
|
||||||
import org.hibernate.type.Type;
|
import org.hibernate.type.Type;
|
||||||
import org.hibernate.type.descriptor.converter.spi.BasicValueConverter;
|
import org.hibernate.type.descriptor.converter.spi.BasicValueConverter;
|
||||||
|
@ -221,6 +222,27 @@ public class TypeDefinition implements Serializable {
|
||||||
// Series of backward compatible special cases
|
// Series of backward compatible special cases
|
||||||
|
|
||||||
if ( Serializable.class.isAssignableFrom( typeImplementorClass ) ) {
|
if ( Serializable.class.isAssignableFrom( typeImplementorClass ) ) {
|
||||||
|
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||||
|
final SerializableType legacyType = new SerializableType( typeImplementorClass );
|
||||||
|
return createBasicTypeResolution( legacyType, typeImplementorClass, indicators, typeConfiguration );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( indicators.getEnumeratedType() != null ) {
|
||||||
|
assert typeImplementorClass.isInterface();
|
||||||
|
return createBasicTypeResolution( new JavaObjectType(), typeImplementorClass, indicators, typeConfiguration );
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"Named type [" + typeImplementorClass + "] did not implement BasicType nor UserType"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static BasicValue.Resolution<Object> createBasicTypeResolution(
|
||||||
|
BasicType<?> type,
|
||||||
|
Class<?> typeImplementorClass,
|
||||||
|
JdbcTypeIndicators indicators,
|
||||||
|
TypeConfiguration typeConfiguration
|
||||||
|
) {
|
||||||
final JavaType<Serializable> jtd = typeConfiguration
|
final JavaType<Serializable> jtd = typeConfiguration
|
||||||
.getJavaTypeRegistry()
|
.getJavaTypeRegistry()
|
||||||
.resolveDescriptor( typeImplementorClass );
|
.resolveDescriptor( typeImplementorClass );
|
||||||
|
@ -230,8 +252,6 @@ public class TypeDefinition implements Serializable {
|
||||||
typeConfiguration.getBasicTypeRegistry().resolve( jtd, jdbcType ),
|
typeConfiguration.getBasicTypeRegistry().resolve( jtd, jdbcType ),
|
||||||
jtd
|
jtd
|
||||||
);
|
);
|
||||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
|
||||||
final SerializableType legacyType = new SerializableType( typeImplementorClass );
|
|
||||||
|
|
||||||
return new BasicValue.Resolution<>() {
|
return new BasicValue.Resolution<>() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -239,12 +259,14 @@ public class TypeDefinition implements Serializable {
|
||||||
return resolved;
|
return resolved;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override @SuppressWarnings({"rawtypes", "unchecked"})
|
@Override
|
||||||
|
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||||
public BasicType getLegacyResolvedBasicType() {
|
public BasicType getLegacyResolvedBasicType() {
|
||||||
return legacyType;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override @SuppressWarnings({"rawtypes", "unchecked"})
|
@Override
|
||||||
|
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||||
public JavaType getDomainJavaType() {
|
public JavaType getDomainJavaType() {
|
||||||
return resolved.getMappedJavaType();
|
return resolved.getMappedJavaType();
|
||||||
}
|
}
|
||||||
|
@ -264,7 +286,8 @@ public class TypeDefinition implements Serializable {
|
||||||
return resolved.getValueConverter();
|
return resolved.getValueConverter();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override @SuppressWarnings({"rawtypes", "unchecked"})
|
@Override
|
||||||
|
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||||
public MutabilityPlan getMutabilityPlan() {
|
public MutabilityPlan getMutabilityPlan() {
|
||||||
// a TypeDefinition does not explicitly provide a MutabilityPlan (yet?)
|
// a TypeDefinition does not explicitly provide a MutabilityPlan (yet?)
|
||||||
return resolved.isMutable()
|
return resolved.isMutable()
|
||||||
|
@ -274,11 +297,6 @@ public class TypeDefinition implements Serializable {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new IllegalArgumentException(
|
|
||||||
"Named type [" + typeImplementorClass + "] did not implement BasicType nor UserType"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Object instantiateType(
|
private static Object instantiateType(
|
||||||
StandardServiceRegistry serviceRegistry,
|
StandardServiceRegistry serviceRegistry,
|
||||||
MetadataBuildingOptions buildingOptions,
|
MetadataBuildingOptions buildingOptions,
|
||||||
|
|
Loading…
Reference in New Issue