因此,我有一个应用程序,其中包含一些遗留的 JDBC 调用,我需要使用一些额外的 JPA 操作进行更新。我需要能够将 JDBC 调用和 JPA 调用作为同一个 DB 事务的一部分。如果重要的话,我正在使用 OpenJPA 2.1.1 和 Postgres 9.1。以下代码似乎可以正常工作 - 我已经运行了一些基本测试,并且 JDBC 和 JPA 语句都执行了;任何一个错误都会导致这对语句没有发生(例如,它们是同一个数据库事务的一部分)。是否有任何我没有看到的问题 - 我违反了一些最佳实践,或者我不能以这种方式重用 Connection 对象的其他原因?
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();
}
}
谢谢!