20170614

作者: James2119 | 来源:发表于2017-06-15 00:05 被阅读13次

    在处理负责的项目时,遇到由于一个异常导致应用无法登录的情况,抛出的异常是JPA事务的样子;
    具体是:
    List rows = query.getResultList();
    这一块处出错的,这个错误导致JPA事务回滚被覆盖什么的。
    百度后发现这块代码有两个不合理的地方:
    *** 一、没有将代码块添加注解@Transactional***
    也许这就是导致后面的异常的主要原因,而且也无法回滚。
    *** 二、这块代码自己主动抛出异常Exception***
    百度后找到:
    TransactionAspectSupport中completeTransactionAfterThrowing (TransactionInfo txInfo, Throwable ex)方法,其中的txInfo.transactionAttribute.rollbackOn(ex)调用DefaultTransactionAttribute中的rollbackOn方法:

    /**
     * The default behavior is as with EJB: rollback on unchecked exception.
     * Additionally attempt to rollback on Error.
     * <p>This is consistent with TransactionTemplate's default behavior.
     */
    public boolean rollbackOn(Throwable ex) {
        return (ex instanceof RuntimeException || ex instanceof Error);
    }
    

    所以只能抛出RuntimeException。如果用第一个中的注解的方式的话,可能也是可以的,这个还没有测试过。

    另外自己写了8位电话号码或者11位手机号长度的js验证代码块

        function ValidateTelePhone(data) {
            var telephone = form.getItemValue("telephone");
            var phoneNum = /^\d{8}$/;
            var telePhoneNum = /^1\d{10}$/;
            if (!phoneNum.test(telephone) && !telePhoneNum.test(telephone)) {
                showAlert("请输入8位电话号码或者11位手机号码!");
                return false;
            }
            return true;
        }

    相关文章

      网友评论

          本文标题:20170614

          本文链接:https://www.haomeiwen.com/subject/fltyqxtx.html