在处理负责的项目时,遇到由于一个异常导致应用无法登录的情况,抛出的异常是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;
}