2016-04-22 8 views
0

私のWebアプリケーションでは、要求ごとのセッションパターンを使用します。私はFilterの接続プールとオープンセッションをSessionFactory.openSession()、次にSession.close()を使用しています。Hibernateセッションを切断する方法

同じアプリでは、複雑なプロセスのために、会話あたりのセッションを使用します。 SessionFactory.openSession()で2番目のセッションを開こうとしましたが、その後にSession.disconnect()を呼び出すと何も起こりません。

セッションを手動で接続/切断するにはどうすればよいですか?これは私のHibernate設定ファイルである:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" 
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> 
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> 
    <property name="hibernate.connection.url">jdbc:postgresql://localhost/.....</property> 
    <property name="hibernate.connection.username">...</property> 
    <property name="hibernate.connection.password">...</property> 

    <property name="hibernate.c3p0.min_size">1</property> 
    <property name="hibernate.c3p0.max_size">20</property> 
    <property name="hibernate.c3p0.timeout">300</property> 
    <property name="hibernate.c3p0.test_connection_on_checkout">true</property> 

    <property name="hibernate.cache.use_second_level_cache">true</property> 
    </session-factory> 
</hibernate-configuration> 

Javaコード:これは二回true出力

longSession = mySessionFactory.openSession(); 
System.out.println(((SessionImplementor) longSession).isConnected()); 
longSession.disconnect(); 
System.out.println(((SessionImplementor) longSession).isConnected()); 

...

私はこれは Hibernate Documentsにこのノートに関係していると思います

答えて

1

注意:disconnect()は、co nnectionは、そのように構成されたConnectionProviderを通してHibernateが を取得し 影響を及ぼさない、提供ConnectionReleaseMode.ON_CLOSE効果

に、データベーストランザクションをコミットDocumentation for session-per-conversation:

にこれに注意されていないからセッションを切断JDBC 接続し、プールへの接続を返します

これは、トランスをコミットする必要があるとします

// foo is an instance loaded earlier by the old session 
Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start transaction 

foo.setProperty("bar"); 

session.flush(); // Only for last transaction in conversation 
t.commit();   // Also return JDBC connection 
session.close(); // Only for last transaction in conversation 
+0

私は知っていますが、どこでも会話について読んでいますが、実際にそれを使用するために何を呼び出すべきか分かりません。 SessionからConnectionを切断できるようにHibernateを設定するには? – Oliv

+0

セッションを切断できるようにするにはどうすればよいですか? – Oliv

+0

@Olivなぜ 'session.close()'を使いたくないのか分かりません。 –

関連する問題