在處理負責的項目時,遇到由于一個異常導致應用無法登錄的情況,拋出的異常是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;
}