オブジェクトリレーションシップマッピング


双方向一対一マッピング
class  Card{
@OneToOne(optional=false,cascade={CascadeType.MERGE,CascadeType.REMOVE},mappedBy="card",fetch=FetchType.EAGER)
Person getPerson(){}
}
mappedByの一方向関係はこの属性を設定する必要はなく、双方向関係は双方が外部キーフィールドを確立しないように設定しなければならない.
データベース内の1対多の関係では、関連関係は常に多角的に維持されています.すなわち、外部キーは多角的に構築されています.私たちは一方のオブジェクトの@OneToMany(mappedby=")にいます.
関係の維持を複数のオブジェクトの属性に渡して関係を維持する
 
mappedByについて復習します.
a)OneToOne,OneToMany,ManyToManyにのみmappedBy属性があり、ManyToOneにはこの属性は存在しない.
b)mappedByラベルはthe owned side(被所有者)に定義されているに違いない.彼はthe owning side(所有者)を指している.
c)関係の所有者は関係の維持を担当し,所有者に外部キーを確立する.だから@JoinColumn
d)mappedByとJoinColumn/JoinTableは常に反発する側にある
 
cascadeは、再帰呼び出しであるカスケード関係を設定します.
CascadeTypeでもいいです.PERSIST(カスケード新規)CascadeType.REMOVE(カスケード削除)CascadeType.REFRESH(カスケードリフレッシュ)CascadeType.MERGE(カスケード更新)CascadeType.ALL(すべてカスケード)
Fetchプリロードポリシーと@Basicの差は多くないFetchType.LAZY, FetchType.EAGER
optionalは、関連エンティティがfalseが存在する必要があるかどうかを設定します.存在しなければならないかどうかは任意ではありません.true関連エンティティは存在しなくても任意です.
例えば、カード(身分証明書)のperson(人)optionalがfalseであることは身分証明書があることを意味し、誰かが対応しなければならないが、実体Personではカードのoptionalがtrueであることは、必ずしも身分証明書を持っていないことを意味する.
@JoinColumn(name="cardid",referencedColumnName="cid")外部キーを設定し、
name外部キーのフィールド名、referencedColumnName外部キーがプライマリ・テーブルのフィールドに対応
cardとpersonは双方向関係なのでcard端でmappedBy=「card」にcardメインテーブルが設定されているので、
したがって、person側の関連項目に外部キー@JoinColumnを設定します.
 
双方向一対多と多対一、一方向一対多と多対一@OneToMany@ManyToOneその他は上記の
双方向多対多(実際の開発では多対多は通常双方向)
@JoinTable(
name="teacher_student",
joinColumns={@JoinColumn(name="teacher_id",referencedColumnName="tid")},
inverseJoinColumns={@JoinColumn(name="student_id",referencedColumnName="sid")}
)
 
joinColumns               ,
 inverseJoinColumns                。

 
単一方向多対多はもっと簡単です