Hibernate 4.3.xには、クラス_org.hibernate.cfg.Configuration
_のメソッドgetClassMapping(className)
があります。しかし、Hibernate 5.xでは、このgetClassMapping(className)
メソッドはConfiguration
クラスから削除されています。
Hibernate-5のコード置換とは何ですか?
この移行の問題について助けてください。
I 投稿 Broadleaf CommerceにもPersistentClass
が必要なため:
私はHibernate 5を使用してツールを作成しており、これらの変更のいくつかを...メタデータを取得するには、Serviceloaderを使用します。
package org.broadleafcommerce.openadmin.server.dao;
import org.hibernate.boot.SessionFactoryBuilder;
import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.boot.spi.SessionFactoryBuilderFactory;
import org.hibernate.boot.spi.SessionFactoryBuilderImplementor;
public class EntityMetaData implements SessionFactoryBuilderFactory {
private static final ThreadLocal<MetadataImplementor> meta = new ThreadLocal<>();
@Override
public SessionFactoryBuilder getSessionFactoryBuilder(MetadataImplementor metadata, SessionFactoryBuilderImplementor defaultBuilder) {
meta.set(metadata);
return defaultBuilder;
}
public static MetadataImplementor getMeta() {
return meta.get();
}
}
次のファイルが必要になります。
/resources/META-INF/services/org.hibernate.boot.spi.SessionFactoryBuilderFactory
完全修飾クラス名を使用します。私の例では次のとおりです。
org.broadleafcommerce.openadmin.server.dao.EntityMetaData
PersisterCreationContextのオブジェクトを取得し、これを試してください:-
PersistentClass persistentClass =
persisterCreationContext.getMetadata().getEntityBinding(className);
Plsはこれをチェックします link (例3.8。ネイティブブートストラップ-すべてをまとめる)は、StandardRegistry、メタデータ、およびHibernate 5.x
のsessionFactory
これで、persisterCreationContextからメタデータを取得していたので、すでにメタデータを取得しているため、エンティティの必要なPersistentClassオブジェクトをすぐに取得できます。
SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();
PersistentClass persistentClass = metadata.getEntityBinding(className);
Hibernate 3および4では、次のようにします
URL configFileURL = getResource(); //some method to get hold of the location of your hibernate.cfg.xml
Configuration configuration = (new Configuration()).configure(configFileURL);
Iterator classMappings = configuration.getClassMappings();
while (classMappings.hasNext()) {
PersistentClass persistentClass = (PersistentClass) classMappings.next();
//do somthing
}
Hibernate 5では、このようにメタデータを初期化します
URL configFileURL = getResource(); //some method to get hold of the location of your hibernate.cfg.xml
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure(configFileURL).build();
Metadata metaData = new MetadataSources(standardRegistry).getMetadataBuilder().build();
メタデータでgetEntityBindings()を使用します
Collection<PersistentClass> entityBindings = metadata.getEntityBindings();
Iterator<PersistentClass> iterator = entityBindings.iterator();
while (iterator.hasNext()) {
PersistentClass persistentClass = iterator.next();
//do somthing
}
これは Hibernate 5.0移行ガイド および Hibernateユーザーガイドのブートストラップの章 で説明されています(特に "レガシーブートストラップ" 付録を参照してください) )。
簡単に言うと、Configurationは引き続きストレートブートストラップでサポートされていますが、bootstrapプロセスに「フック」するには、新しいbootstrap APIを使用する必要があります。