빅아이의 기록장
JPA 연관관계 본문
연관관계는 2개의 Entity간의 관계를 맺으며
관계의 주인된 Entity와, 관계에 종속된 Entity로 구분지을 수 있다.
관계의 주인 = 외래키를 가진 Entity - Profile
- OneToMany 에서는 Many쪽에 정의하며
- OneToOne에서는 Many로 확장될 수 있는 쪽에 정의한다.
@OneToOne
@JoinColumn(name = "my_user_id)
private MyUser myUser;
* 관계의 주인이 관계 생성, 변경, 삭제에 대한 책임이 있으며, 관계의 주인이 아닌 쪽은 읽기가 가능하다.
* JoinColumn에 name값은 DB에 저장될 Column명칭으로 camelcase가 아닌 _ 을 쓰도록 하자.
관계에 종속된 Entity - MyUser
@OneToOne(mappedBy = "myUser")
private MyProfile myProfile;
* mappedBy는 JAVA Code에서 실제로 사용하는 변수명으로, camelCase로 작성한다.
* 관계에 종속된 MyUser 객체가 삭제되면, MyProfile 객체는 고아객체가 된다. 이 경우, 고아객체도 삭제되게 하려면 orphanRemoval을 설정하면 된다.
@OneToOne(mappedBy="myUser", orphanRemoval = true)
이렇게 하면 MyUserRepository.delete(myUser)로 삭제되어도 관계의 주인객체가 본인이 고아객체가 된 것을 알고 삭제될 수 있다.
관계의 주인된 Entity와, 관계에 종속된 Entity로 구분지을 수 있다.
관계의 주인 = 외래키를 가진 Entity - Profile
- OneToMany 에서는 Many쪽에 정의하며
- OneToOne에서는 Many로 확장될 수 있는 쪽에 정의한다.
@OneToOne
@JoinColumn(name = "my_user_id)
private MyUser myUser;
* 관계의 주인이 관계 생성, 변경, 삭제에 대한 책임이 있으며, 관계의 주인이 아닌 쪽은 읽기가 가능하다.
* JoinColumn에 name값은 DB에 저장될 Column명칭으로 camelcase가 아닌 _ 을 쓰도록 하자.
관계에 종속된 Entity - MyUser
@OneToOne(mappedBy = "myUser")
private MyProfile myProfile;
* mappedBy는 JAVA Code에서 실제로 사용하는 변수명으로, camelCase로 작성한다.
* 관계에 종속된 MyUser 객체가 삭제되면, MyProfile 객체는 고아객체가 된다. 이 경우, 고아객체도 삭제되게 하려면 orphanRemoval을 설정하면 된다.
@OneToOne(mappedBy="myUser", orphanRemoval = true)
이렇게 하면 MyUserRepository.delete(myUser)로 삭제되어도 관계의 주인객체가 본인이 고아객체가 된 것을 알고 삭제될 수 있다.