@OneToOne

0

JPA

목록 보기
13/15

  • 회원과 락커의 관계는 단방향이여도 됨
  • 고객과 포인트에서 포인트는 자식이 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번과정은 거치지 않음 (순환구조 끊김)
profile
백엔드를 공부하고 있습니다.

0개의 댓글