围绕交易服务的方面引发了意想不到的流动性感受



我在交易服务中有方面。不幸的是,当我通过服务遇到错误时,抛出了另一个例外。如何防止此错误?*我搜索了类似的问题,但没有人解决我的案件

似乎足够了
@Aspect
@Component
public class ServiceGuard {   
    @Pointcut("execution(* simgenealogy.service.*.*(..))")
    public void persistence() {}
    @Around("persistence()")
    public Object logPersistence(ProceedingJoinPoint joinPoint) { 
        try {
            Object o =  joinPoint.proceed();
            return o;
        } catch (ConstraintViolationException constraintException) {
            // (...)
            return null;
        } catch (Throwable throwable) {
            // (...)
            return null;
        }
    }
}

和错误日志。

2019-07-29 02:10:37.979 ERROR 11300 --- [ion Thread] s.a.g.s.w.ServiceGuard                   :
            Constraint violation: First Name cannot be empty
2019-07-29 02:10:38.023 ERROR 11300 --- [ion Thread] s.a.g.s.w.ServiceGuard                   :
            Constraint violation: Last Name cannot by empty
Exception in thread "JavaFX Application Thread" org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:755)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:714)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:534)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:305)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
    at 

您捕获可能出于某种原因而发生的异常。然后,您只需在先前执行的(通过proceed()(方法的结果返回null,可能是在预期另一个非零返回值的情况下。

由于您不提供任何应用程序代码,这是投机性的,但是我认为然后将零返回值分配给具有非零值的数据属性(请参阅日志中的约束违规行为(。更确切地说,您将首先设置为null,这会导致约束违规行为,这又导致您的交易被回滚,因为未设置强制性数据字段。

如何解决这个问题?返回名称/姓氏的非无效默认值(听起来很奇怪(,或者让原始异常升级而不是吞咽它们并引起后续问题。

底线:您的异常处理刚刚破裂,需要修复。

好的,我找到了解决方案。 @transactional也是 @arround方面。问题在于订购方面。我的后卫课实际上并不是关于交易的。将@Order(0(放在Guard和@Order(1(上@Transactional Service解决问题。

最新更新