- 회원과 락커의 관계는 단방향이여도 됨
- 고객과 포인트에서 포인트는 자식이 pk이면서 fk이면 무조건 양방향으로 만들어야함
역할구분부터 확실히 해야한다.
- 자식역할을 할 쪽에 @ManyToOne을 대신할 @OneToOne을 사용하고,
- 부모쪽에서는 @OneToMany를 대신할 @OneToOne를 사용한다.
- @Id 고객번호(PK)와 포인트는 고객의 자식이므로
@ManyToOne
을 쓰지만 1:1 관계이기 때문에 이를 대신해서 @OneToOne으로 한다.
FK이므로 @JoinColumn
을 사용해서 fk로 사용할 column명 적어준다.
fk면서 pk로 쓰인다는 것 ➡︎ fk와 pk를 연결해줘야함
- 복합키로 설정할 때 MapsId를 사용했던 것을 여기서도 쓴다.
@Id
고객번호를 지정한다. 그래서 @OneToOne
에 @MaspId("고객번호")
를 설정해준다.
- 고객이 삭제될 때 포인트도 삭제돼야 한다.
- 고객쪽에
cascade
설정 & mappedBy
해줘야함!!!
- update되는게 아니라 delete돼야하므로 mappedBy 설정 필요
- mappedBy를 사용하지 않으면 단방향을 사용 가능하다!!!!
- 이 경우에는 cascade를 써야하고 cascade를 쓰려면 mappedBy가 필요하다. -> 양방향이다.
결론
💡 자식
@Id
: PK
@JoinColumn
: FK
@OneToOne
: @ManyToOne의 변형
@MapsId
: fk입장에서 pk와 연결해주는 역할
💡 부모
@OneToOne
: @OneToMany의 변형
- cascade 필요
- mappedBy 필요 ➡︎ mappedBy를 쓰면 양방향이라는게 정해짐
OneToOne에서 mappedBy
- mappedBy를 안하면 서로 참조하는 구조를 만듦.....
mappedBy로 설정해주면 1번에서 출발하고 부모쪽에 도착하면 다시 역방향으로 간 후 3번과정은 거치지 않음 (순환구조 끊김)