1

GWT プロジェクトで JPA (Hibernate を使用) と Gilead を使用しています。サーバー側にはこのメソッドがあり、同じ「キャンペーン」でこのメソッドを 2 回呼び出しています。2 回目の呼び出しで、4 行目の「campaign.getTextAds()」でヌル ポインター例外がスローされます。

public List<WrapperTextAd> getTextAds(WrapperCampaign campaign) {
  campaign = em.merge(campaign);
  System.out.println("getting textads for "+campaign.getName());
  for(WrapperTextAd textad: campaign.getTextAds()) {
      //do nothing
  }
  return new ArrayList<WrapperTextAd>(campaign.getTextAds());
}

WrapperCampaign エンティティのコードは次のようになります

@OneToMany(mappedBy="campaign")
  public Set<WrapperTextAd> getTextAds() {
    return this.textads;
}
4

1 に答える 1

1

3 行目は吹き飛ばさないので、キャンペーンは null ではありません。for each ループは、反復されるコレクションが null の場合に NPE をスローします (null コレクション パラメーターで新しい ArrayList を初期化しようとする場合と同様)。これを防ぐ必要があります:

if(campaign.getTextAds() != null) {
    for(WrapperTextAd textad: campaign.getTextAds()) {
        //do nothing
    }
}
于 2010-03-31T11:29:00.890 に答える