例外がスローされたくないときに例外がスローされるという問題があります。ここに私の2つのクラスがあります:
public List<ErrorResponse> validate()
{
List<ErrorResponse> errors = new ArrayList<ErrorResponse>();
try
{
Users user = userManager.findByCompany(job.getCompanyId().getId());
}
catch (Exception e)
{
ErrorCodes err = ErrorCodes.CODE101;
errors.add(new ErrorResponse(err.getCode(), err.getMessage()));
}
}
public Users findByCompany(Integer companyId)
throws UserNotFoundException, UsernameNotProvidedException
{
if (username == null)
{
throw new UserUsernameNotProvidedException();
}
TypedQuery<Users> query = em.createNamedQuery("Users.findByCompany", Users.class);
query.setParameter("companyId", companyId);
try
{
Users result = query.getSingleResult();
return result;
}
catch (NoResultException e)
{
throw new UserNotFoundException();
}
catch (NonUniqueResultException e)
{
throw new UserNotFoundException();
}
catch (Exception e)
{
throw new UserNotFoundException();
}
}
わかりました-validate()メソッドは(別のクラスで)findByCompany()メソッドを呼び出します。スローされる例外は、findByCompany() メソッドのランタイム 'NonResultException' (正しい) です。これは同じメソッドで CAUGHT され、アプリケーション例外 'UserNotFoundException' がスローされます。これは、validate() メソッドに伝播され、「catch(Exception e)」でキャッチされるはずです。ただし、代わりに、validate() の「catch(Exception e)」が代わりに「EJBTransactionRolledBackException」をキャッチしています。これは私が望むものではありません。結果が見つからない場合、アプリケーションは続行する必要があります。
確かに、実行時例外をキャッチしてアプリケーション例外をスローすることで (また、validate() メソッドでそれをキャッチすることで)、ロールバックを回避する必要がありますか?
前もって感謝します。