相关疑难解决方法(0)

仅标记为回滚的事务:如何查找原因

我在@Transactional方法中提交事务时遇到问题:

methodA() {
    methodB()
}

@Transactional
methodB() {
    ...
    em.persist();
    ...
    em.flush();
    log("OK");
}
Run Code Online (Sandbox Code Playgroud)

当我从methodA()调用methodB()时,该方法成功通过,我可以在日志中看到"OK".但后来我明白了

Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:521)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
    at methodA()...
Run Code Online (Sandbox Code Playgroud)
  1. 方法B的上下文在异常中完全丢失 - 我想这没关系?
  2. methodB()中的某些内容将事务标记为仅回滚?我怎么能找到它?例如,有一种方法来检查类似的东西getCurrentTransaction().isRollbackOnly()?- 像这样我可以逐步完成方法并找到原因.

java spring hibernate jpa transactions

83
推荐指数
7
解决办法
21万
查看次数

标签 统计

hibernate ×1

java ×1

jpa ×1

spring ×1

transactions ×1