@Transactional
public void start() {
...
...
int result = entityManager
.createQuery("update Users set name=" + value + " where user.id=5").executeUpdate();
.....
}
上面的代码给出了javax.persistence.TransactionRequiredException异常。
在交易过程中更新数据库,可能吗?
有什么建议吗?
感谢。
一个。
我只是想知道是否
答案 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();
注意 - 这接近伪代码,此示例中缺少异常处理。