1

Hibernateで1つの問題に直面しています。これがコードです。

    Configuration cfg = new Configuration().configure();
    SessionFactory factory = cfg.buildSessionFactory();
    Session session = factory.openSession();

    Transaction trans = session.beginTransaction();
    trans.begin();
    Session session2 = factory.getCurrentSession();
    System.out.println(session2.isConnected());

    trans.commit();

そして私のcfgファイルで

  <session-factory>
    <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
    <property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433</property>
    <property name="hibernate.connection.username">username</property>
    <property name="connection.password">password</property>
    <property name="connection.pool_size">5</property>
    <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="show_sql">true</property>
    <property name="hbm2ddl.auto">false</property>
    <mapping resource="Test.hbm.xml"/>
</session-factory>

上記のコードでアプリケーションを実行すると、「org.hibernate.HibernateException:isConnectedはアクティブなトランザクションなしでは無効です」という例外が発生します。

内部でどのような動作をしているのかわかりません。どんなアイデアでもお願いします。

4

1 に答える 1

2

SessionFactory.html#getCurrentSessionの Java ドキュメントを見ると

現在のセッションを取得します。使用するように構成された CurrentSessionContext impl によって制御される正確な「現在」の意味の定義。

したがって、sessionsession2は 2 つの異なるセッションです。session2そのため、にアクセスするには でトランザクションを開始する必要がありますisConnected()

ただし、 getCurrentSession()最初のセッションを取得していた場合、2 回目getCurrentSession()は同じインスタンスを返します。

Session session = factory.getCurrentSession();//Use getCurrentSession rather than openSession
Transaction trans = session.beginTransaction();
trans.begin();

Session session2 = factory.getCurrentSession();//Same session will be returned.

System.out.println(session2.isConnected());
trans.commit();
于 2012-10-10T11:05:03.360 に答える