この質問を投稿する前に、私はすでにthisを見ましたが、私が探していたものを得ることができませんでした。javax.persistence.NoResultException:クエリのエンティティが見つかりません
私が書いた質問に対して、1つの行しか存在しないか、まったく存在しないことがあります。だから、私がgetResultList()
を使用する理由はありません。
は、ここに私のコードです:何の行が存在しない場合
String hql="from DrawUnusedBalance where unusedBalanceDate= :today";
Query query=em.createQuery(hql);
query.setParameter("today",new LocalDate());
DrawUnusedBalance drawUnusedBalance=
(DrawUnusedBalance)query.getSingleResult();// we can have only a
// single datum per day
//`System.out.println(drawUnusedBalance.toString());`
問題はあるが、それは例外をスローし、そうでない場合、それが正常に動作します。私は問題を知っているが、私は最高の解決策も探している。
DBに行がない場合は、(例外を取得する代わりに)nullオブジェクトを取得したかったので、新しいデータを挿入します。ヌルでない場合は、更新したいだけですそれ。
これを処理する方法が1つありますが、正しい方法ではないと思います。それは:私はtry-catchブロックを持ち、例外をスローすると、catchブロックのDBに新しいデータを挿入するように書くことができます。しかし、私はより良い方法があると信じています。
ありがとうManuPK ...しかし、私はまだオブジェクトを作成しているDBを行ういくつかのコードを書く必要があります..キャッチブロック....と私はキャッチブロックからデータを保持するための良い方法ではないと思った...あなたの応答のためのtnx。 – WowBow
**チェックされた例外**をキャッチして別のパスをとるのに間違いはないと感じます。それがJPAがあなたにそれをどう扱うかというオプションを与える理由です。実際に探しているメソッドはJPAで利用できない[hibernate](http://docs.jboss.org/hibernate/core/3.2/api/org/hibernate/Query.html#uniqueResult())で利用できます。 – ManuPK
@ user1017111 **キャッチ**の中にコードを書く際に問題があります。私はコードを読みやすくするために答えを少し更新しました。 – ManuPK