私は小さな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カスタム例外をスローしようとしましたが、うまくいきませんでした。