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了。