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

时间:2013-06-18 08:20:38

标签: 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的原因是,我们正在某些共享接口上导出数据,而我们不再使用这些数据了。

我想提一下,该事务是Container-Managed(由Geronimo提供)。 EntityManager通过链接创建:

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

1 个答案:

答案 0 :(得分:0)

明确使用事务提交:

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

这应该有效。在.begin()和.end()之间执行所有操作的时间当然也取决于您正在执行的循环,您插入的行数,从数据库的位置(网络的速度)问题等等......