新しいJPA 2.1機能を使用してカスタム汎用Enumコンバータを作成したかったのです。しかし、展開時にこのエラーが発生します。Caused by: org.hibernate.AssertionFailure: Could not extract ParameterizedType representation of AttributeConverter definition from AttributeConverter implementation class [de.lukaseichler.pomodoro.task.entity.converter.PriorityConverter]
AttributeConverter定義のParameterizedType表現を抽出できませんでした
JPA 2.1でWildfly 8.0.0.Beta1でHibernate 4.3.0を使用しています。 休止状態で何かしているのですが、これはエラーですか?あなたが行うことができます回避策として
Enumconverter.java
public abstract class EnumConverter<T extends Enum> implements AttributeConverter<T, String> {
private Class<T> type;
@Override
public String convertToDatabaseColumn(T attribute) {
return attribute.name();
}
@Override
public T convertToEntityAttribute(String name) {
if (type == null) {
getType();
}
return (T)Enum.valueOf(type, name);
}
private void getType() {
Class<?> converterClass = getClass();
while (true) {
Class<?> baseClass = converterClass.getSuperclass();
assert baseClass != null : "Converter must be derived from " + EnumConverter.class.getName();
if (baseClass == EnumConverter.class) {
break;
}
converterClass = baseClass;
}
Type genericSuperClass = converterClass.getGenericSuperclass();
assert genericSuperClass instanceof ParameterizedType : EnumConverter.class.getName() + "must be generic";
Type[] typeParms = ((ParameterizedType) genericSuperClass).getActualTypeArguments();
assert typeParms.length == 2 : EnumConverter.class.getName() + " must have 2 type parameters but has " + typeParms.length;
Type enumType = typeParms[1];
if(enumType instanceof ParameterizedType) {
enumType = ((ParameterizedType) enumType).getRawType();
}
assert enumType instanceof Enum<?> : "Entity must be a enum type";
type = (Class<T>) enumType;
}
}
PriorityConverter.java
@Converter(autoApply = true)
public class PriorityConverter extends EnumConverter<Priority>{
}
Priority.java
public enum Priority {
NONE, LOW, NORMAL, HIGH, TOP;
}
あなたは、HibernateやJPA APIのバージョンを含む、プロジェクトの設定を投稿してくださいことはできますか? – chrylis
JPA 2.1でWildfly 8.0.0.Beta1でHibernate 4.3.0を使用しています –
[関連コードはこちら](https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src /main/java/org/hibernate/cfg/AttributeConverterDefinition.java)。 Hibernate 4.3.0はまだベータです。最新版(ベータ5)を使用していることを確認してください。 – chrylis