java - 提交期间的延迟(使用 JPA/JTA)

标签 java oracle jpa jta geronimo

我想请您帮忙解决以下问题。我有方法:

String sql = "INSERT INTO table ...."
Query query = em.createNativeQuery(sql);
query.executeUpdate();
sql = "SELECT max(id) FROM ......";
query = em.createNativeQuery(sql);
Integer importId = ((BigDecimal) query.getSingleResult()).intValue();

for (EndurDealItem item : deal.getItems()) {
        String sql2 = "INSERT INTO another_table";
        em.createNativeQuery(sql2).executeUpdate();
    }

执行后,数据并未提交(大约需要10或15分钟才能提交数据)。有什么方法可以显式提交数据或触发提交吗?是什么导致交易在这么长时间内保持未提交状态?

我们使用nativeQueries的原因是,我们正在某些共享接口(interface)上导出数据,并且我们不再使用这些数据。

我想提一下,该事务是容器管理的(由 Geronimo 管理)。 EntityManager是通过链接创建的:

 @PersistenceContext(unitName = "XXXX", type = PersistenceContextType.TRANSACTION)
 private EntityManager em;

最佳答案

显式使用事务提交:

EntityManager em = /* get an entity manager */;
em.getTransaction().begin();
// make some changes
em.getTransaction().commit();

这应该有效。 .begin() 和 .end() 之间的所有操作的执行时间当然还取决于您正在执行的周期、您插入的行数、数据库的位置(网络速度)事项)等等...

关于java - 提交期间的延迟(使用 JPA/JTA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17163870/

相关文章:

java - java中继承是编译时还是运行时

sql - Oracle 排序顺序和大于运算符在 varchar 列上不一致

java - 我的Mediaplayer一次卡住了

java - 检查 MySQL 的更新并显示通知替代方案

oracle - 如何为分区的 LOB 索引指定 INITRANS?

oracle - 如何在 Haskell 中连接到 Oracle DB

java - 具有 Where 约束的 SecondaryTable

java - Hibernate 实体管理器即使在刷新/刷新后也不会删除对象

hibernate - JPA 和 Hibernate 代理行为

java - 为什么在方法中抛出一般异常是不好的?