【发布时间】:2013-06-18 08:20:37
【问题描述】:
我想就以下问题向您寻求帮助。我有方法:
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 的原因是,我们在某个共享接口上导出数据,并且我们不再使用这些数据。
我想提一下,该事务是由容器管理的(由 Geronimo 提供)。 EntityManager 是通过链接创建的:
@PersistenceContext(unitName = "XXXX", type = PersistenceContextType.TRANSACTION)
private EntityManager em;
【问题讨论】:
-
嗨 Ondrej,你试过这个吗:em.getTransaction().begin();//你的代码; em.getTransaction().commit();正如我建议的那样?我认为这会奏效......让我知道
-
嘿,我尝试了两种可能性,但问题出在 EntityManager 和 Transactions -> 我被禁止使用 getTransaction() 并对其进行操作,因为它是容器管理的事务。我现在正在调查 OpenJPA 设置中的一些属性。
标签: java oracle jpa jta geronimo