前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。
1. 报错如题:
RollbackException: Transaction marked as rollbackOnly
2. 原因是在一个事物 (Transaction) 中有另外一个事物,内部事物已经报错了(可能要求回滚)。发生异常后当前的事务就被标记为 rollback-only,外层事务管理器却还想要执行 commit ,这时就会抛出如题异常。
我的出错代码如下 ( sql 中把使用本地 sql 和 jpa 混用了,写了个 a ,sql 中并无此字段 。):
List<Object> removeList = null;logger.error("\n\n\n-----------uid-----:" + uid + "\n\n\n");if (StringUtils.isNotEmpty(uid)) {EntityManager em = null;try {em = entityManager;String querSql = "SELECT a FROM gaei_work_weight WHERE approver_id != ? AND employee_id = ? ";Query quer = em.createNativeQuery(querSql);quer.setParameter(1, uid);quer.setParameter(2, uid);removeList = quer.getResultList();logger.error("\n\n\n-------------------------不由他审批数据为:" + removeList.size());} catch (Exception e) {logger.error("", "判断是否领导时异常", e.getMessage());} finally {if (null != em) {em.close();}}}
3. 解决:
只要解决了内层事物的报错就自然 OK了。