可以在事务中间更新数据库吗?

时间:2010-11-04 07:44:58

标签: java hibernate jpa transactions

 
 @Transactional
 public void start() {
  ...
  ...
  int result = entityManager
                .createQuery("update Users set name=" + value + " where user.id=5").executeUpdate();
  .....

 }

上面的代码给出了javax.persistence.TransactionRequiredException异常。

在交易过程中更新数据库,可能吗?

有什么建议吗?

感谢。

一个。

我只是想知道是否

1 个答案:

答案 0 :(得分:4)

这是一个运行时异常,当需要事务但不活动时由持久性提供程序抛出需要事务,因为start方法被注释为事务性的。要摆脱异常,您必须调查为什么从事务上下文中调用该行。

在(不同的)交易期间,可以进行数据库更新。取决于活动事务和事务策略锁定的表。但在这种情况下,您需要输入start方法之前激活事务


使用JPA,您可以执行以下操作:

em = emf.createEntityManager();
tx = em.getTransaction();
tx.begin();   // now a transaction is active
start();      // call your method
// call other methods...
tx.commit();  // now the update is actually done
em.close();

注意 - 这接近伪代码,此示例中缺少异常处理。