2012-02-28 18 views
37

hibernateセッションからjdbc接続を取得したい。休止状態セッション内にメソッドがある。 すなわちsession.connection();それは廃止されました。私はまだこの作品を知っているが、私は彼らがこれのためのいくつかの代替手段を提供している必要があります確信して私は廃止されたメソッドを使用したくない? http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Session.html接続方法apiはこの目的のためにorg.hibernate.jdbc.Workを使用していると言いますが、そのための例は何も見つかりませんか?ここでhibernateセッションからjdbc接続を取得する方法は?

+2

を誰もがすでに答えを持っている他の質問の1へのリンクを含めてください重複として質問をマークした場合は、 –

答えて

74

は、あなたがそれを使用する方法である。

session.doWork(new Work() { 
    @Override 
    public void execute(Connection connection) throws SQLException { 
     //connection, finally! 
    } 
}); 
+0

質問:私は、 '取得しますdoWorkはこのコードではアクティブなトランザクションなしでは有効ではありません。どうすればトランザクションを開始できますか? – OscarRyz

+2

@OscarRyz:Springを使用している場合は、 '@ Transactional'または' TransactionTemplate'で十分です。未処理のHibernateでは、[session.beginTransaction() 'を手動で実行する必要があります(http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/transactions.html#transactions-basics)。 –

+0

こんにちはバディ..いい答えですが、doWork()も廃止されました。 – Logicalj

11

私は同様の問題を抱えていたと私は、接続を取得するためにConnectionProviderクラスを使用していました。私の解決策を参照してください。

Session session = entityManager.unwrap(Session.class); 
SessionFactoryImplementor sessionFactoryImplementation = (SessionFactoryImplementor) session.getSessionFactory(); 
ConnectionProvider connectionProvider = sessionFactoryImplementation.getConnectionProvider(); 
try { 
     connection = connectionProvider.getConnection(); 
     ... 
} 
+1

簡単な説明を追加できますか?これがどのように問題を解決するのか? – Ren

+4

sessionFactoryImplementation.getConnectionProvider()は省略されています – vels4j

21

はこれを試してみてください:

((SessionImpl)getSession()).connection() 
+6

ここで私に似ていない人には:['Session.connection'](http://docs.jboss.org/hibernate/core/3.5/api/org/ hibernate/Session.html#connection%28%29)メソッドは現在廃止予定です。 – Dinei

+2

Implにキャストしないでください!その内部! (org.hibernate.internal.SessionImpl)。そして、あなたはこのコードをもうモックでテストすることはできません。これは多くの理由で悪いことです。 – Rainer

関連する問題