2013-10-27 11 views
5

新しい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; 
} 
+0

あなたは、HibernateやJPA APIのバージョンを含む、プロジェクトの設定を投稿してくださいことはできますか? – chrylis

+0

JPA 2.1でWildfly 8.0.0.Beta1でHibernate 4.3.0を使用しています –

+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

答えて

6

@Converter(autoApply = true) 
    public class PriorityConverter extends EnumConverter<Priority> 
         implements AttributeConverter<Priority, String> {} 

このHibernateのバグがで報告されていますhttps://hibernate.atlassian.net/browse/HHH-8854

関連する問題