web-dev-qa-db-ja.com

Hibernate 4でセッションファクトリを作成する

Hibernate 4でセッションファクトリを生成するのに問題があります。Hibernate3では簡単にできました。

org.hibernate.cfg.Configuration conf= HibernateUtil
    .getLimsInitializedConfiguration(systemConfiguration
.getHibernateconfFile());

SessionFactory sf = conf.configure().buildSessionFactory();

ここで、ServiceRegistryクラスをbuildSessionFactoryに渡す必要がありますが、Javadocはこれを行う方法について非常にあいまいです。任意のヒント?

62
MTR

はい、彼らは以前のbuildSessionFactory APIを廃止しました。うまくやるのはとても簡単です。このようなことができます。

EDIT:ServiceRegistryBuilderは非推奨です。 StandardServiceRegistryBuilderを使用する必要があります

public void testConnection() throws Exception {

            logger.info("Trying to create a test connection with the database.");
            Configuration configuration = new Configuration();
            configuration.configure("hibernate_sp.cfg.xml");
            StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
            SessionFactory sessionFactory = configuration.buildSessionFactory(ssrb.build());
            Session session = sessionFactory.openSession();
            logger.info("Test connection with the database created successfuly.");
    }

詳細および詳細については、 https://github.com/hibernate/hibernate-orm/blob/master/hibernate-testing/src/main/Java/orgでhibernateの公式テストケースを確認できます。 /hibernate/testing/junit4/BaseCoreFunctionalTestCase.Java 関数(buildSessionFactory())。

70
Love Hasija

これを試して!

package your.package;

import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil
{
    private static SessionFactory sessionFactory;
    private static ServiceRegistry serviceRegistry;

    static
    {
        try
        {
//          Configuration configuration = new Configuration();
            Configuration configuration = new Configuration().configure();

            serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        }
        catch (HibernateException he)
        {
            System.err.println("Error creating Session: " + he);
            throw new ExceptionInInitializerError(he);
        }
    }

    public static SessionFactory getSessionFactory()
    {
        return sessionFactory;
    } 
}
18
Lalo
Configuration hibConfiguration = new Configuration()
            .addResource("wp4core/hibernate/config/table.hbm.xml")
            .configure();       

serviceRegistry = new ServiceRegistryBuilder()
            .applySettings(hibConfiguration.getProperties())
            .buildServiceRegistry();

sessionFactory = hibConfiguration.buildSessionFactory(serviceRegistry);
session = sessionFactory.withOptions().openSession();
11
ZE pixota

以下は、hibernate 4.0.0.Finalで私が経験したことを表しています。

org.hibernate.cfg.Configurationクラスのjavadoc(LGPLライセンスで配布)には次のように記載されています:

注:これは、4.0リリースの後、代わりにServiceRegistryBuilderおよびorg.hibernate.metamodel.MetadataSourcesを使用することで置き換えられます。このリリースでは、このクラスは非推奨となり、5.0で削除される予定です。詳細については、 HHH-618HHH-2578 および HHH-6586 を参照してください

問題2578を見て、次のようなものを使用しました。

ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().configure().buildServiceRegistry();
MetadataSources metadataSources = new MetadataSources(serviceRegistry);
metadataSources.addResource("some_mapping.hbm.xml")
SessionFactory sessionFactory = metadataSources.buildMetadata().buildSessionFactory();

構成の読み取りを開始するには、xmlns="http://www.hibernate.org/xsd/hibernate-configuration"およびxmlns="http://www.hibernate.org/xsd/hibernate-mapping"を使用するようにhibernate 3.2.6構成およびマッピングファイルを変更し、dtd仕様を削除する必要がありました。

Hibernate.cfg.xmlで定義されたマッピングとhibernate。のhibernate関連プロパティのプレフィックスhibernateで定義されたマッピングを検査する方法が見つかりませんでした。 cfg.xmlはオプションではなくなりました。

これは一部の人にとってはうまくいくかもしれません。

私は、マッピングファイルに<cache usage="read-write" />が含まれており、非推奨の設定方法を使用してしまったため、何らかのエラーに遭遇しました。

Configuration configuration = new Configuration().configure();
SessionFactoryImpl sessionFactory = (SessionFactoryImpl) configuration.buildSessionFactory();
EventListenerRegistry listenerRegistry = sessionFactory.getServiceRegistry().getService(EventListenerRegistry.class);
SolrIndexEventListener indexListener = new SolrIndexEventListener(); // a SaveOrUpdateEventListener i wanted to attach
listenerRegistry.appendListeners(EventType.SAVE_UPDATE, indexListener);

構成がhibernate.cfg.xmlでイベントリスナーを検索しなくなったため、プログラムでイベントリスナーを追加する必要がありました。

7
Andrei Amariei

4.3.0 APIにも更新があります。 ServiceRegistryBuilderも4.3.0で廃止され、StandardServiceRegistryBuilderに置き換えられました。これで、セッションファクトリを作成するための実際のコードは次のようになります セッションファクトリの作成例

5
Krishna

[http://www.javabeat.net/session-factory-hibernate-4/からの引用]

Hibernateコアフレームワークには非推奨のAPIが数多くあります。現時点でのイライラする点の1つは、休止状態の公式ドキュメントでは、新しいAPIの使用方法に関する明確な指示が提供されておらず、ドキュメントが完全であることを示しています。また、各インクリメンタルバージョンは、重要なAPIの一部に変更を加えます。そのようなものの1つは、病棟のHibernate 4.3.0でセッションファクトリを作成するための新しいAPIです。以前のバージョンでは、次のようにセッションファクトリを作成しました。

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

メソッドbuildSessionFactoryはhibernate 4リリースから非推奨であり、新しいAPIに置き換えられます。 hibernate 4.3.0以降を使用している場合、コードは次のとおりである必要があります。

Configuration configuration = new Configuration().configure();

StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());

SessionFactory factory = configuration.buildSessionFactory(builder.build());

クラスServiceRegistryBuilderは4.3.0のStandardServiceRegistryBuilderに置き換えられています。 5.0リリースでは多くの変更があるようです。それでも、非推奨のAPIと使用する適切な代替手段についてはあまり明確ではありません。すべてのインクリメンタルリリースには、廃止されたAPIが追加されており、リリース5.0のコアフレームワークを微調整しています。

2
Kuan

以前のバージョンでは、セッションファクトリは次のように作成されました。

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

メソッドbuildSessionFactoryはhibernate 4リリースから廃止され、新しいAPIに置き換えられました。 hibernate 4.3.0以降を使用している場合、コードは次のようにする必要があります。

Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder.build());
1
Amit Chaurasia

メソッドbuildSessionFactoryはHibernate 4リリースから廃止され、新しいAPIに置き換えられました。 Hibernate 4.3.0以降を使用している場合、コードは次のとおりである必要があります。

Configuration configuration = new Configuration().configure();

StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
        .applySettings(configuration.getProperties());

SessionFactory factory = configuration.buildSessionFactory(builder.build());
1
user3198259