我正在构建一个小型 JavaEE 项目并有一个存储库类:
@Stateless
public class UserRepository extends AbstractRepository<User> {
@PersistenceContext
private EntityManager em;
public User getByName(String username) {
CriteriaBuilder criteriaBuilder = ...
return em.createQuery(query).getSingleResult();
}
}
我有使用此功能的服务类:
@Stateless
public class UserService extends AbstractService<User> {
public User getByName(String username) {
try {
return userRepository.getByName(username);
} catch (Throwable e) {
// says: "Caught: EJBTransactionRolledbackException"
System.out.println("Caught: " + e.getClass());
return null;
}
}
}
我希望该catch (Throwable e)
子句能够捕获此方法中可能发生的任何事情,但显然我错了。我的日志中仍然有一个TransactionRolledbackException
。我读了为什么我不能捕获 EJB 异常?但这个问题本身并没有真正的答案。
为什么TransactionRolledbackException
仍然抛出,我该如何防止这种情况?此外,它与EJBTransactionRolledbackException
实际被抓到的人有什么关系?
我还尝试在方法中捕获异常getByName
并抛出自定义异常,但没有运气。