6

私は休止状態を扱っており、現在のプロジェクトを開いたときに、Session-Factory が非推奨であることがわかりました。

AnnotationConfiguration af = new AnnotationConfiguration();
SessionFactory factory = af.configure().buildSessionFactory();
Session session = factory.openSession();

AnnotationConfiguration は今では非推奨になっているようです...そのため、JavaDoc を確認したところ、次の場所に移動したと言われました。

org.hibernate.cfg.Configuration

私のコードはこれまでのところ問題なく動作していますが、実際には変更したくありません...しかし、Googleで検索したところ、SessionFactoryを変更する必要がある理由と同じ質問を自問している人が見つかりました... http://rgordon.co.uk/ブログ/2012/02/24/hibernate-please-dont-deprecate-yourself/

記事は2012年のもので(それほど古いものではありません...)、すべてを次のように説明しています。

ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder();
serviceRegistryBuilder.applySettings(properties);
ServiceRegistry serviceRegistry = serviceRegistryBuilder.buildServiceRegistry();

Configuration configuration = new Configuration().addClass(FeedTradePersistable.class);

SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

私はそれを実装しました。JavaDoc はそれが間違っていることを証明しています - 再び! 非推奨。それは以下を指します:

org.hibernate.boot.registry.StandardServiceRegistryBuilder

私はそれをもう一度ググった。結果は満足いくものではありませんでした…

私はコードを変更し始めました...

ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
Configuration configuration = new Configuration();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();

そして、例外がスローされます...

org.hibernate.HibernateException: 'hibernate.dialect' が設定されていない場合、接続を null にすることはできません

行で:

SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

これは、構成設定を指定していないためだと確信しています。実際、私はしたくありません。hibernate.cfg.xml に満足しています。

私は configuration.addFile(.. で少し遊んでみました - それほど成功しませんでした...

誰かがそれについて考えていますか?ありがとう

更新: (hibernate.cfg.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
    <property name="hibernate.connection.url">jdbc:sqlserver://localhost\SQLEXPRESS</property>
    <property name="hibernate.connection.username">qohelet</property>
    <property name="hibernate.connection.password">password</property>
    <property name="current_session_context_class">thread</property>
    <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
    <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
    <property name="bonecp.setIdleMaxAgeInMinutes">240</property>
    <property name="bonecp.setIdleConnectionTestPeriodInMinutes">5</property>
    <property name="bonecp.partitionCount">3</property>
    <property name="bonecp.acquireIncrement">10</property>
    <property name="bonecp.maxConnectionsPerPartition">60</property>
    <property name="bonecp.minConnectionsPerPartition">20</property>
    <property name="bonecp.statementsCacheSize">50</property>
    <property name="bonecp.releaseHelperThreads">3</property>
        <mapping class="order.Line" />
        <mapping class="order.Order" />
        <mapping class="order.Group" />
  </session-factory>
</hibernate-configuration>

更新 (2014 年 2 月 16 日): 私の pom.xml も表示する必要があると思います。Hibernate-Framework のどの組み合わせが自分に合うかを理解するまで、しばらく時間がかかりました...

<dependency>
    <groupId>org.hibernate.common</groupId>
    <artifactId>hibernate-commons-annotations</artifactId>
    <version>4.0.2.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>3.6.10.Final</version>
    <exclusions>
        <exclusion>
            <artifactId>hibernate-commons-annotations</artifactId>
            <groupId>org.hibernate.common</groupId>
        </exclusion>
        <exclusion>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <groupId>org.hibernate.javax.persistence</groupId>
        </exclusion>
        <exclusion>
            <artifactId>hibernate-commons-annotations</artifactId>
            <groupId>org.hibernate</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.1.8.Final</version>
    <exclusions>
        <exclusion>
            <artifactId>hibernate</artifactId>
            <groupId>org.hibernate</groupId>
        </exclusion>
        <exclusion>
            <artifactId>hibernate-annotations</artifactId>
            <groupId>org.hibernate</groupId>
        </exclusion>
        <exclusion>
            <artifactId>hibernate-commons-annotations</artifactId>
            <groupId>org.hibernate</groupId>
        </exclusion>
        <exclusion>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <groupId>org.hibernate.javax.persistence</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-commons-annotations</artifactId>
    <version>3.2.0.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.0-api</artifactId>
    <version>1.0.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jpamodelgen</artifactId>
    <version>1.1.1.Final</version>
    <scope>provided</scope>
</dependency>
4

3 に答える 3

12

4.3の場合は次のようになったと思います:

   Configuration configuration=new Configuration()
            .configure(); // configures settings from hibernate.cfg.xml

    StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();

    // If you miss the below line then it will complaing about a missing dialect setting
    serviceRegistryBuilder.applySettings(configuration.getProperties());

    ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
于 2014-01-09T10:07:58.927 に答える
2

はい、hibernate バージョン 4.3 では、buildSessionfactory() と ServiceRegistryBuilder() の両方が非推奨です。

そのため、コーディングを次のように変更して、休止状態バージョン 4.3 のセッション ファクトリを取得しました。

public class HibernateSessionFactory {

private static final SessionFactory sessionFactory = buildSessionFactory1();

private static SessionFactory buildSessionFactory1() {
    Configuration configuration = new Configuration().configure(); // configuration
                                                                    // settings
                                                                    // from
                                                                    // hibernate.cfg.xml

    StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();


    serviceRegistryBuilder.applySettings(configuration.getProperties());

    ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();

    return configuration.buildSessionFactory(serviceRegistry);
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

public static void shutdown() {
    // Close caches and connection pools
    getSessionFactory().close();
}

}

于 2014-02-11T07:55:06.610 に答える