getSingleResultで javax.ejb.EJBTransactionRolledbackException(更新)
環境
問題点
EntityManagerでNamedQueryを使ってデータ取得してるんだけど、結果がNullとなる場合だけ「javax.ejb.EJBTransactionRolledbackException」が発生しちゃう。
取得後にNull判定しようと思っていたのに。
em.createNamedQuery("User.findByUsername").setParameter("username", username).getSingleResult();
対応
getSingleResult()を使わずgetResultList()を使って、取得後にListのサイズ判定することにしました。
正解はどこなのかなぁ。
List<User> list = em.createNamedQuery("User.findByUsername", User.class) .setParameter("username", username) .getResultList(); if (list.isEmpty()) { // TODO }
追記:対応その2
- daoのメソッド内でgetSingleResult()の「javax.persistence.NoResultException」をcatchしてやりたいように処理する。
- null返却, 独自Exceptionのthrow ...
こっちでやろう。
Javaエンジニア養成読本 [現場で役立つ最新知識、満載!] (Software Design plus) 新品価格 |