私は小さなJavaEEプロジェクトを構築しており、リポジトリクラスを持っています:
@Stateless
public class UserRepository extends AbstractRepository<User> {
@PersistenceContext
private EntityManager em;
public User getByName(String username) {
CriteriaBuilder criteriaBuilder = ...
return em.createQuery(query).getSingleResult();
}
}
そして、私はこの関数を使用する Service クラスを持っています:
@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
カスタム例外をスローしようとしましたが、うまくいきませんでした。