2012-02-14 12 views
1

私はインターンシップのためにJPA準拠キットを作成しています...そのキットの一部には、コーナーケースの正しい実装のテストが含まれています。@ ManyToMany/@ OneToMany bidirectionalアソシエーション用のmappedby属性

@ManyToManyにはmappedBy属性があります。

String mappedBy - 関係を所有するフィールドまたはプロパティ。関係が一方向でない場合は必須です。

んが、デフォルトが指定されていない - デフォルトの列は空です。双方向@ManyToMany考える

- この例では、JPA 2.0 JSR-317の仕様自体からです!

カスタマー

@ManyToMany 
@JoinTable(name="CUST_PHONES") 
public Set<PhoneNumber> getPhones() { return phones; } 

のPhoneNumber

@ManyToMany(mappedBy="phones") 
public Set<Customer> getCustomers() { return customers; } 

mappedBy属性はCustomer@ManyToManyで定義されていません!私が気付いていない双方向マッピングのデフォルトがありますか?

私は似たようなケースを見ていないとが見つかりました: @OneToOne - mappedByはオプションで、デフォルト @OneToManyから@ManyToManyとまったく同じ(mappedByにはデフォルトで、双方向のためのオプションです)要するに

、私の質問:@ManyToMany@OneToManyについては は、関係(例でCustomer)の所有側のためのmappedBy属性に何を配置する必要がありますか?

答えて

1

これはコーナーケースではありません。すべての双方向の関連付けには、所有者側と逆側があります。

JPAは所有側を使用して、2つのエンティティ間に関連が存在するかどうかを判断します。反対側は無視されます。

所有側(JoinColumn、JoinTable等の注釈を使用して)関連付けがマップされる方法を定義するものです。 mappedBy属性はありません。 「ねえ、私は、次のプロパティでマッピングされた1のちょうど逆相関だ」:

逆側が言ってmappedBy属性を使用しています。

したがって、定義上、所有側にはmappedBy属性がありません。それがあれば、それは所有側ではないでしょう。

これは、JPA specでよく説明されています。この仕様のコンプライアンスキットを構築する必要がある場合は、それを読み理解することをお勧めします。

のJava仕様の参加同意書(JSPA)で要求されているように、私は本当に

JPA2 JSR home pageに書かれたとして、ので、そのような準拠キットを書くのポイントが表示されていない

、 れるJava Persistence API、バージョン2.0 TCKは、資格のある非営利団体へのサポートなしで、 の料金でライセンスされます。そのような 資格は、互換性テスト 奨学金プログラムによって確認されます。また、奨学金の承認を受けて のサポートを受けることもできます。詳細については、 をhttp://java.sun.com/scholarship/に参照してください。

+0

適合キットは、JPAで使用される注釈の単体テストの単なる名です。今は、ORMに焦点を当てています...これらのユニットテスト(またはそれらのラインに沿った他のもの)がすでに存在しているとお考えですか?インターンシップをしている会社は、オープンソースアプリケーションのテストの一環としてこれを開発したいと考えています。 私は 'mappedBy'の使い方をちょっと理解していますが、私はちょうどその正確な言葉遣いについて混乱しています。なぜ、双方向関係の所有側を排除せずに非単方向関係にmappedBy注釈が必要であると言うのでしょうか? – Pimgd

+0

TCKは、JPA実装をテストするために使用されます。 JPAで構築されたアプリケーションのテストには使用されません。だからあなたのキットは役に立つかもしれないと思います。開発者が怠け者であり、アノテーションのユーザーがJPA仕様、またはmappedBy属性の使用について詳細に説明されているアノテーション自体のjavadocを読んでいると考えたためです。 –

+0

"ここで、mappedBy属性の使用について詳しく説明しています。このドキュメントへのリンクを教えてください。私はそれをオンラインで見つけることができますが、私はJSR-317仕様で読むことができるように思われます。この特定の状況については何も明らかにしていません。 – Pimgd

関連する問題