gpt4 book ai didi

javax.persistence.RollbackException : Transaction marked as rollbackOnly

转载 作者:太空宇宙 更新时间:2023-11-04 13:32:28 24 4
gpt4 key购买 nike

我正在使用 Spring MVC 制作游戏。我有一种获取游戏并更新的方法,但是当它更新时会出现错误,这是代码:

HomeController.class

@Transactional
@RequestMapping(value = "/partida/{idPartida}", method = RequestMethod.GET)
public String getPartida(@PathVariable("idPartida") long idPartida,
Model model) throws IOException {
Partida p = ServicioAplicacionPartida.getPartida(entityManager,
idPartida);

if (p.getJson() == null) {
p.inicializarPartida(entityManager);
ServicioAplicacionPartida.update(entityManager, p);
}

GameDAO.class

@Transactional
public static Partida update(EntityManager entityManager, Partida p) {
try {
Query q = entityManager.createNativeQuery("update Partida p SET p.json=:json where p.id=:id");
q.setParameter("json", p.getJson());
q.setParameter("id", p.getId());
q.executeUpdate();
return entityManager.find(Partida.class, p.getId());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

执行“q.executeUdate()”行时出现错误,如下:

javax.persistence.PersistenceException:org.hibernate.exception.DataException:无法执行语句

这是服务器错误:

Estado HTTP 500 - 请求处理失败;嵌套异常是 org.springframework.transaction.TransactionSystemException: 无法提交 JPA 事务;嵌套异常是 javax.persistence.RollbackException:事务标记为 rollbackOnly

我可以做什么来修复它?

最佳答案

您将 Controller 和 DAO 方法注释为 @Transactional,这是不正确的,因为 @Transactional 可以继承到内部方法。通常事务应该从服务层开始。

尝试将这些参数添加到 @Transactional 注释中,并将其从 Controller 或 DAO 中删除。:

@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor=Exception.class)

关于javax.persistence.RollbackException : Transaction marked as rollbackOnly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32034292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com