JPA中报错:javax.persistence.TransactionRequiredException:Executing an update/delete query
时间: 2023-11-22 17:54:21 浏览: 378
这个错误通常表示在JPA事务中执行了一个更新或删除操作,但当前没有事务。解决方法是在更新或删除操作前开启一个事务,如下所示:
```java
EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
// 执行更新或删除操作
entityManager.createQuery("DELETE FROM MyEntity e WHERE e.id = :id")
.setParameter("id", 123)
.executeUpdate();
transaction.commit();
```
在这个例子中,我们手动开启了一个JPA事务并在其中执行了一个删除操作。请注意,我们使用了 `executeUpdate()` 方法来执行操作,而不是 `getResultList()` 或 `getSingleResult()` 方法。这是因为 `executeUpdate()` 方法不返回任何结果,而只是返回受影响的行数。
如果您正在使用Spring框架,也可以考虑使用 `@Transactional` 注解来简化事务管理。例如:
```java
@Transactional
public void deleteMyEntity(Long id) {
entityManager.createQuery("DELETE FROM MyEntity e WHERE e.id = :id")
.setParameter("id", id)
.executeUpdate();
}
```
在这个例子中,我们使用 `@Transactional` 注解标记了 `deleteMyEntity()` 方法。这意味着该方法将在一个JPA事务中运行,而无需手动开启或提交事务。
阅读全文