- DB 테이블에서는 테이블 사이의 연관관계를
FK(외래 키)
로 맺을 수 있고 방향 상관없이 조회가 가능하다.Entity
에서는 상대Entity
를 참조하여Entity
사이의 연관관계를 맺을 수 있다.- 하지만 상대 Entity를 참조하지 않고 있다면 상대
Entity
를 조회할 수 있는 방법이 없다.- 따라서
Entity
에서는 DB 테이블에는 없는 방향의 개념이 존재한다.
@OneToOne
: 1 대 1 관계를 맺어주는 역할을 한다.
- 외래 키의 주인 정하기
- Entity에서 외래 키의 주인은 일반적으로 N(다)의 관계인 Entity 이지만,
1 대 1 관계에서는 외래 키의 주인을 직접 지정해야한다.- 외래 키 주인만이 외래 키 를
등록
,수정
,삭제
할 수 있으며, 주인이 아닌 쪽은 오직 외래 키를읽기
만 가능하다.
- 음식 (외래 키의 주인)
@Entity @Table(name = "food") public class Food { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private double price; @OneToOne @JoinColumn(name = "user_id") private User user; }
- 고객
@Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; }
- 양방향 설정
- 양방향 관계에서 외래 키의 주인을 지정해 줄 때
mappedBy
옵션을 사용한다.
mappedBy
의 속성값은 외래 키의 주인인상대 Entity의 필드명
을 의미한다.- 외래 키의 주인은 상대 Entity 타입의 필드를 가지면서
@JoinColumn()
을 활용하여 외래 키의 속성을 설정을 해준다.- 상대 Entity는
외래 키의 주인 Entity
타입의 필드를 가지면서mappedBy
옵션을 사용하여 속성 값으로외래 키의 주인 Entity
에 선언된@JoinColumn()
으로 설정되고 있는 필드명을 넣어주면 된다.
- 음식 (외래 키의 주인)
@Entity @Table(name = "food") public class Food { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private double price; @OneToOne(mappedBy = "food") private User user; }
- 고객
@Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToOne @JoinColumn(name = "food_id") private Food food; }
내가 주말에도 공부를 하는날이 올줄이야
요즘 게임이 재미없어져서 그런지 주말에 할게없어서 그냥 강의를 들었는데
생각보다 나쁘지 않은것같다
매주는 절대 불가능 하겠지만 종종 주말에도 공부해보는것도 나쁘지 않은것 같다 :)