HHH-8854 - Could not extract ParameterizedType representation of AttributeConverter definition
This commit is contained in:
parent
6ea3464163
commit
d9495474ef
|
@ -31,6 +31,7 @@ import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.persistence.AttributeConverter;
|
import javax.persistence.AttributeConverter;
|
||||||
|
import javax.persistence.Converter;
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
|
@ -47,6 +48,82 @@ public class AttributeConverterDefinition {
|
||||||
private final Class entityAttributeType;
|
private final Class entityAttributeType;
|
||||||
private final Class databaseColumnType;
|
private final Class databaseColumnType;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build an AttributeConverterDefinition from the AttributeConverter Class reference and
|
||||||
|
* whether or not to auto-apply it.
|
||||||
|
*
|
||||||
|
* @param attributeConverterClass The AttributeConverter Class
|
||||||
|
* @param autoApply Should the AttributeConverter be auto-applied?
|
||||||
|
*
|
||||||
|
* @return The constructed definition
|
||||||
|
*/
|
||||||
|
public static AttributeConverterDefinition from(Class<? extends AttributeConverter> attributeConverterClass, boolean autoApply) {
|
||||||
|
return new AttributeConverterDefinition(
|
||||||
|
instantiateAttributeConverter( attributeConverterClass ),
|
||||||
|
autoApply
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static AttributeConverter instantiateAttributeConverter(Class<? extends AttributeConverter> attributeConverterClass) {
|
||||||
|
try {
|
||||||
|
return attributeConverterClass.newInstance();
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
throw new AnnotationException(
|
||||||
|
"Unable to instantiate AttributeConverter [" + attributeConverterClass.getName() + "]",
|
||||||
|
e
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build an AttributeConverterDefinition from the AttributeConverter Class reference. The
|
||||||
|
* converter is searched for a {@link Converter} annotation to determine whether it should
|
||||||
|
* be treated as auto-apply. If the annotation is present, {@link Converter#autoApply()} is
|
||||||
|
* used to make that determination. If the annotation is not present, {@code false} is assumed.
|
||||||
|
*
|
||||||
|
* @param attributeConverterClass The converter class
|
||||||
|
*
|
||||||
|
* @return The constructed definition
|
||||||
|
*/
|
||||||
|
public static AttributeConverterDefinition from(Class<? extends AttributeConverter> attributeConverterClass) {
|
||||||
|
return from( instantiateAttributeConverter( attributeConverterClass ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build an AttributeConverterDefinition from an AttributeConverter instance. The
|
||||||
|
* converter is searched for a {@link Converter} annotation to determine whether it should
|
||||||
|
* be treated as auto-apply. If the annotation is present, {@link Converter#autoApply()} is
|
||||||
|
* used to make that determination. If the annotation is not present, {@code false} is assumed.
|
||||||
|
*
|
||||||
|
* @param attributeConverter The AttributeConverter instance
|
||||||
|
*
|
||||||
|
* @return The constructed definition
|
||||||
|
*/
|
||||||
|
public static AttributeConverterDefinition from(AttributeConverter attributeConverter) {
|
||||||
|
boolean autoApply = false;
|
||||||
|
Converter converterAnnotation = attributeConverter.getClass().getAnnotation( Converter.class );
|
||||||
|
if ( converterAnnotation != null ) {
|
||||||
|
autoApply = converterAnnotation.autoApply();
|
||||||
|
}
|
||||||
|
|
||||||
|
return new AttributeConverterDefinition( attributeConverter, autoApply );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build an AttributeConverterDefinition from the AttributeConverter instance and
|
||||||
|
* whether or not to auto-apply it.
|
||||||
|
*
|
||||||
|
* @param attributeConverter The AttributeConverter instance
|
||||||
|
* @param autoApply Should the AttributeConverter be auto-applied?
|
||||||
|
*
|
||||||
|
* @return The constructed definition
|
||||||
|
*/
|
||||||
|
public static AttributeConverterDefinition from(AttributeConverter attributeConverter, boolean autoApply) {
|
||||||
|
return new AttributeConverterDefinition( attributeConverter, autoApply );
|
||||||
|
}
|
||||||
|
|
||||||
public AttributeConverterDefinition(AttributeConverter attributeConverter, boolean autoApply) {
|
public AttributeConverterDefinition(AttributeConverter attributeConverter, boolean autoApply) {
|
||||||
this.attributeConverter = attributeConverter;
|
this.attributeConverter = attributeConverter;
|
||||||
this.autoApply = autoApply;
|
this.autoApply = autoApply;
|
||||||
|
|
Loading…
Reference in New Issue