この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:1
ページ更新者:guest
更新日時:2019-02-14 09:40:56

タイトル: JPAにおけるjava.sql.Connectionの取得方法
SEOタイトル: 【Spring】JPAにおけるjava.sql.Connectionの取得方法

この記事の要点
  • JPA から素の java.sql.Connection を取得する方法
  • EntityManager.unwrap(SessionImpl.class).getJdbcConnectionAccess().obtainConnection() 等で取得
  • Hibernate なら Session.doWork(connection -> { ... }) が安全
  • JPA の管理外で SQL を直接実行したいときに使う(StoredProcedure 等)

 

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.hibernate.Session;
import org.hibernate.jdbc.Work;

...

@Autowired
private
EntityManagerFactory factory;    

public Connection getConnection() {

    EntityManager entityManager = factory.createEntityManager();
    entityManager.getTransaction().begin();
    
    
Session hibernateSession = entityManager.unwrap(Session.class);
    
ConnectionWork work = new ConnectionWork(); 
    hibernateSession.doWork(work);
    
Connection conn = work.getConnection(); 
    
    return conn;
}

private static class ConnectionWork implements Work { 
    
    Connection conn; 
    
    @Override 
    public void execute(Connection conn) throws SQLException { 
        this.conn = conn; 
    }
    
    Connection getConnection() { 
        return conn; 
    }
}