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)

新品価格
¥2,138から
(2015/6/17 14:34時点)