java – 在一个事务中组合JPA和JDBC操作
|
所以,我有一个带有一些遗留JDBC调用的应用程序,我需要使用一些额外的JPA操作进行更新.我需要能够将JDBC调用和JPA调用作为同一数据库事务的一部分.如果重要的话,我正在使用OpenJPA 2.1.1和Postgres 9.1.以下代码似乎正常工作 – 我运行了一些基本测试,并且JDBC和JPA语句都执行;任何一个中的错误都会导致这对语句没有发生(例如,它们是同一个DB事务的一部分).我有没有看到任何问题 – 我违反了一些最佳做法,或者其他原因我不能以这种方式重新使用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();
}
}
谢谢! 解决方法通过一次调整,我认为应该没问题.值得注意的是what the OpenJPA documentation has to say about it:
您的交易不受管理,但我认为这不是乐观的.此外,在启动事务和执行JDBC操作之间,您还没有完成任何JPA工作,因此我认为您可能属于“如果EntityManager在当前事务中已刷新”的情况. 你没有做的一件事就是在继续使用JPA之前关闭连接.我假设OpenJPA没有返回它正在使用的实际连接,但是在OpenJPA恢复工作之前应该关闭它的一些包装器. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Java操作日期时间范例代码大全
- Object转json字符串,Object转Map,Map转Object 简单源码
- java – 线程退出与未捕获的异常:无堆栈跟踪
- java – DAO模式和开放原则
- Android获取当前时间与星期几
- java – 为什么FileSystemXmlApplicationContext会对存在的
- 36个Android开发常用代码片段
- java – 如何使用apache commons cli指定多个选项?
- java 避免出现NullPointerException(空指针)的方法总结
- java-ee – 在@MappedSuperclass中定义@UniqueConstraint
