2016-08-10 11 views
0

私は2つのテーブル、サプライヤーと会社を持っています。セットを使用した多対1マッピング

企業は既に設定されています。サプライヤーの作成中に、サプライヤーが商品を提供する企業のリストを取得します。

リストは企業の主キーであるcompanies_idを含むことになります。 サプライヤーのテーブルにサプライヤーの詳細を挿入している間、私はサプライヤーを会社のテーブルにあるサプライヤーにマップしたいと思います。

私はSupplierEOでこのマッピングをしています

@ManyToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER, targetEntity = CompanyEO.class) 
    @JoinColumn(name="Company_ID") 
    public Set<CompanyEO> getCompanyEO() { 
     return companyEO; 
    } 

public void setCompanyEO(Set<CompanyEO> companyEO) { 
    this.companyEO = companyEO; 
} 

アムなって、次のエラーサプライヤーの詳細を節約しながら

org.hibernate.PropertyAccessException:はIllegalArgumentException はCompanyEO.carrierId

のゲッターを呼び出して発生しました

答えて

0

@ManyToManyまたはを使用しないでください。? SupplierEOに複数のCompanyEOがある場合は、toMany関係が必要です。 また、複数のCompanyEOがいる場合は、そのように呼び出すようにしてください。会社だけの会社を呼び出すことは、特にあなたのコードを知らない人にとって、誤解を招きます。

例外について:postをご覧ください。 基本的に何JB Nizetが言っていることは次のとおりです。

私の推測では、Hibernateは遅延ロードを実装セット(PersistentSet)の独自の実装を使用してセッターを呼び出し、セッターが呼び出されたときにまだ初期化されていないということです。このセットのメソッドを呼び出すので、ロード・フェーズ中にセット・ロード自体を行います。これにより、Hibernateは矛盾した状態になります。

したがって、プロパティアクセスではなくフィールドアクセスを使用する方がよいでしょう。

編集:ああ、また全体のスタックトレースを追加してください。むしろコードとしてではなく、ブロッククォートとして追加してください。

関連する問題