2016-08-29 6 views
0

せずに私は以下のいくつかが現れ私の仕事でいくつかのレガシーコード創設しています:簡略化のため@OneToManyは@JoinColumns

を、一つのクラスと多くのクラスを想像してみてください。 一つクラスで私が得た:

@OneToMany(mappedBy = "toOne") 
private List<Many> manies; 

しかし多くクラスでは、フィールドトゥーンは次のように定義されています

@JoinColumn(name = "unrelated", referencedColumnName = "id") 
UnrelatedEntity toOne; 

だけもっともらしい説明はトゥーンフィールドはとの関係の両方を持っているということです無関係で、FK to Many。しかし、ローカルまたはリモート@JoinColumnを使用せずにmappedByを使用して@OneToManyを持つことは可能ですか?私は、その単純化を使った例は見ませんでした。自動的に結合のために1 @ IDを使用していますか?

答えて

2

"mappedBy"は、関係の2つの側面をそれ以上リンクしません。 JoinColumnを省略すると、結合テーブルを使用して関係を管理します。 JoinColumnを使用する場合は、「多数の側」のFKを使用してリレーションシップを管理します。非常に簡単です。 FKの場合、どれくらいの数の@Idフィールドが「1面」にありますか。

+0

正しく理解されていれば、mappedByとの単方向の '@OneToMany'に '@JoinColumn'の必要はありません。単純に 'One。@ Id'がmappedByフィールドから使用されます。 JPA wikiや簡潔な研究でその単純化を見つけることができなかったので驚くべきことです – Whimusical

+0

上記のようにFKを介して関係を管理する必要がある場合は、必要があります。結合表が必要な場合は、JoinColumn ...を省略するか、 '@ JoinTable'を入れます。あなたは確かにJoinColumnの属性を必要としません.PKはFKにマップするために使用されます –

+0

私の英語では申し訳ありませんが、多くはFKによってOneにOneにリンクされているようです。問題は、Oneに@OneToMany(mapped by)を入れるだけで、JPAには十分であるかどうかです。つまり、Many Points to Oneのフィールドが推測されます。@ Id – Whimusical