1. ホーム
  2. java

[解決済み] javax.persistence.NoResultException: クエリに対応するエンティティが見つかりませんでした。

2022-02-19 20:34:35

質問

この質問を投稿する前に、私はすでに これ しかし、私が探しているものを得ることができませんでした。

私が書いたクエリでは、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オブジェクトを取得したいので、私は新しいデータを挿入し、それがNULLでない場合、私はそれを更新したいだけです。

この処理には1つの方法がありますが、私はこの方法は正しくないと思っています。それは 私はトライキャッチブロックを持ち、それが例外をスローした場合、私はキャッチブロック上でDBに新しいデータを挿入するために書き込むことができます。しかし、私はより良い方法があると信じています。

どのように解決するのですか?

はい。 try/catch ブロックは必要ありませんが Exception . のように API を投げます。 NoResultException がない場合、それをどのように処理するかはあなた次第です。

DrawUnusedBalance drawUnusedBalance = null;
try{
drawUnusedBalance = (DrawUnusedBalance)query.getSingleResult()
catch (NoResultException nre){
//Ignore this because as per your logic this is ok!
}

if(drawUnusedBalance == null){
 //Do your logic..
}