【发布时间】:2013-07-18 12:45:50
【问题描述】:
我正在构建一个小型 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。我读了Why can't I catch EJB exceptions?,但这个问题本身并没有真正的答案。
为什么TransactionRolledbackException 仍然被抛出,我该如何防止这种情况发生?另外,它与实际被捕获的EJBTransactionRolledbackException 有什么关系?
我还尝试在 getByName 方法中捕获异常并抛出自定义异常,但没有成功。
【问题讨论】:
标签: jakarta-ee exception jpa ejb