そのため、いくつかのレガシー JDBC 呼び出しを含むアプリケーションがあり、追加の JPA アクションで更新する必要があります。同じ DB トランザクションの一部として、JDBC 呼び出しと JPA 呼び出しの両方を実行できる必要があります。問題があれば、OpenJPA 2.1.1 と Postgres 9.1 を使用しています。次のコードは正しく動作しているように見えます。いくつかの基本的なテストを実行したところ、JDBC ステートメントと JPA ステートメントの両方が実行されました。いずれかでエラーが発生すると、ステートメントのペアが実行されません (たとえば、それらは同じ DB トランザクションの一部です)。私が見ていない問題がありますか - 私が違反しているベストプラクティス、またはこの方法で接続オブジェクトを再利用できないその他の理由はありますか?
EntityManager em = _em; //acquired from OpenJPA
em.getTransaction().begin();
Connection conn;
try {
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
conn = oem.getConnection();
PreparedStatement ps = conn.prepareStatement(myStatement);
//initialize parameters in ps
ps.executeUpdate();
em.merge(myJpaObject);
em.getTransaction().commit();
} finally {
if (ps != null && !ps.isClosed()) {
ps.close();
}
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
}
ありがとう!