私はhibernate-core 5.1.0を使用しています。フィールドのHashMapを構築するコンバータを実装しました。問題は、sessionFactoryの構築中に休止状態になっていないことです。 「AttributeConverterをインスタンス化できません」というメッセージが表示され、トレース全体が追加されました。Hibernate AttributeConverter:例外をインスタンス化できません
興味深い部分は、私がHashMapの<文字列、文字列>を拡張するクラスを作成し、コンバータ(とHibernateのエンティティクラス)で、そのクラスを使用する場合は、この例外が消えるということです。変換型でジェネリックを使用すべきでないかのように見えます。
この問題を解決する他の方法はありますか?
マイコンバータ:
@Converter(autoApply=true)
public class JsonKeyValueConverter implements
AttributeConverter<HashMap<String, String>, String> // DOESNT work
//AttributeConverter<ClassExtendingHashMap, String> // works
{
public String convertToDatabaseColumn(HashMap<String, String> arg0) {
if (arg0 == null) {
return null;
}
return DBUtility.GSON.toJson(arg0);
}
public KeyValueData convertToEntityAttribute(String arg0) {
arg0 = StringUtils.isBlank(arg0) ? null : arg0;
return (KeyValueData) DBUtility.GSON.fromJson(arg0, HashMap.class);
}
}
java.lang.IllegalStateException: org.hibernate.cfgで AttributeConverter [org.labs.collab.repo.entity.conversion.JsonKeyValueConverterをインスタンス化することができません。 org.hibernate.cfgでAbstractPropertyHolder.resolveAttributeConverterDefinition(AbstractPropertyHolder.java:98) でorg.hibernate.cfg.annotations.PropertyBinder.makePropertyAndValue(PropertyBinder.java:195) org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlreadyで.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:216) でorg.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2238) (AnnotationBinder.java:963 ) でorg.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:796) でorg.hibernate.cfg.Configuration $ MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3788) org.hibernate.cfgで。コンフィグレーション$ MetadataSourceQueue.processMetadata(Configuration.java:3742) at org.hibernate.cfg.Configuration.secondPassCompile(コンフィグレーションorg.hibernate.AnnotationException: org.hibernate.cfg.AbstractPropertyHolderでAttributeConverterインスタンスを作成できませんion.java:1410) org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) に起因しますjava.lang.ClassCastExceptionが: sun.reflect.generics .makeAttributeConverterDefinition(AbstractPropertyHolder.java:132) org.hibernate.cfg.AbstractPropertyHolder.resolveAttributeConverterDefinition(AbstractPropertyHolder.java:95) で ... 27もっとによって引き起こされます。 reflectionObjects.ParameterizedTypeImplは になります。 org.hibernate.cfg.AttributeConverterDefinition(AttributeConverterDefinition.java:67)でjava.lang.Classにキャストできません。 org.hibernate.cfg.AbstractPropertyHolder.makeAttributeConverterDefinition(AbstractPropertyHolder.java:129) ... 28もっと
おかげで !