1

次のコードがあります。それは正常に動作します。例外などはありません。標準クエリで取得した JPA Entity オブジェクトのリストをループしています (したがって、リストにオブジェクトはありませんnull)。

for (PeriodicalTable periodical : resultsP){
        stringFor.add(periodical.getReference());
        site = em.find(SiteTable.class, periodical.getSiteID());
        if (site != null && site.getPostcode() != null && !site.getPostcode().equals("")){
            tempString = site.getPostcode().replaceAll("\\s+", " ");
            periodical.setPostcode(tempString.trim());                       
            }    
        }

ここで、ループされるリスト内のオブジェクトにofifがある場合にのみ 1 行が実行されるように、ステートメントを追加しました。以下にマークを付けます。contractManagerID0

for (PeriodicalTable periodical : resultsP){
        if(periodical.getContractManagerID()==0) //<---- HERE!!!!
        {
            stringFor.add(periodical.getReference());
        }
        site = em.find(SiteTable.class, periodical.getSiteID());           
        if (site != null && site.getPostcode() != null && !site.getPostcode().equals("")){
            tempString = site.getPostcode().replaceAll("\\s+", " ");
            periodical.setPostcode(tempString.trim());                       
            }                
        }

いくつかのデバッグの後、例外を if ステートメント自体 (「HERE」とマーク) からのものとして分離しましたが、それがどのようになるのかわかりません。リストにオブジェクトがないことはわかっていnullます。そうしないと、if ステートメントがなくても機能しませんが、それがなくても正常に機能します。私は完全に迷っています。

4

2 に答える 2

1

それを見つけるためのかなり簡単な方法があります:

  • HERE行にブレークポイントを設定します。Eclipse (Eclipse を使用していると仮定します) デバッガーがポップアップしたら、periodical変数を選択して押しますCtrl + Shift + I(これは「Inspect」と呼ばれます)。null でない場合は評価しperiodical.getContractManagerID()ます。である必要がありますnull

これは、その数値を格納するためにプリミティブを使用していないことを意味します。プリミティブを使用するか、適切なデフォルトを追加するか、またはチェックする必要がありnullます。

クラスにがある場合、Integerそれは になる可能性があることを意味します。 PeriodicalTablenull

于 2013-09-24T09:36:07.047 に答える