我想请教您以下问题的帮助。我有方法:
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;
答案 0 :(得分:0)
明确使用事务提交:
EntityManager em = /* get an entity manager */;
em.getTransaction().begin();
// make some changes
em.getTransaction().commit();
这应该有效。在.begin()和.end()之间执行所有操作的时间当然也取决于您正在执行的循环,您插入的行数,从数据库的位置(网络的速度)问题等等......