Spring - Entity 연관 관계

김상엽·2024년 2월 3일
0

Spring

목록 보기
12/26
post-thumbnail



TIL


Entity 연관 관계

  • DB 테이블에서는 테이블 사이의 연관관계를 FK(외래 키)로 맺을 수 있고 방향 상관없이 조회가 가능하다.
  • Entity에서는 상대 Entity를 참조하여 Entity 사이의 연관관계를 맺을 수 있다.
  • 하지만 상대 Entity를 참조하지 않고 있다면 상대 Entity를 조회할 수 있는 방법이 없다.
  • 따라서 Entity에서는 DB 테이블에는 없는 방향의 개념이 존재한다.

1 대 1 관계

  • @OneToOne : 1 대 1 관계를 맺어주는 역할을 한다.

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;
}

1 대 1 관계(양방향 관계)

  • 양방향 설정
    • 양방향 관계에서 외래 키의 주인을 지정해 줄 때 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;
}

오늘의 회고

내가 주말에도 공부를 하는날이 올줄이야
요즘 게임이 재미없어져서 그런지 주말에 할게없어서 그냥 강의를 들었는데
생각보다 나쁘지 않은것같다
매주는 절대 불가능 하겠지만 종종 주말에도 공부해보는것도 나쁘지 않은것 같다 :)

profile
개발하는 기록자

0개의 댓글