jiisoo
지수로그
jiisoo
전체 방문자
오늘
어제

블로그 메뉴

  • home
  • Github
  • 알고리즘 문제풀이 저장소
  • 분류 전체보기 (80)
    • Java (1)
    • Spring (30)
    • JPA (15)
    • cs (8)
      • 디자인패턴 (1)
      • 네트워크 (5)
      • Database (1)
      • 운영체제 (1)
    • algorithm (18)
      • 알고리즘 & 자료구조 이론 (12)
      • 알고리즘 풀이 (6)
    • 면접 준비 (0)
    • 회고 (5)
      • ATDD (4)
      • 학습테스트로 배우는 spring 2기 (1)
      • 프로젝트 (0)

인기 글

최근 댓글

최근 글

태그

티스토리

hELLO · Designed By 정상우.
jiisoo

지수로그

[Jpa] 다대일[N:1], 일대다[1:N] 에 대해서
JPA

[Jpa] 다대일[N:1], 일대다[1:N] 에 대해서

2023. 5. 9. 16:42
  • 다대일의 반대는 일대다 : ) .

 

💡 다대일 [N : 1]

  • 가장 많이 사용하는 연관관계 이다.

 

다대일 단방향

  • 외래키가 있는 쪽에 참조를 걸어준다고 생각하면 된다.
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Member {
    @Id
    @GeneratedValue
    private Long id;
    
    @Column(name = "USERNAME")
    private String name;
    
    @ManyToOne
    private Team team;
}

@Entity
@Getter @Setter
public class Team {
    @Id
    @GeneratedValue
    private Long id;

    private String name;
}

 

 

다대일 양방향 

  • 연관관계가 주인이 아닌 쪽에 필드를 추가해주면 단순 조회는 가능하다.
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Member {
    @Id
    @GeneratedValue
    private Long id;
    
    @Column(name = "USERNAME")
    private String name;
    
    @ManyToOne
    private Team team;
}

@Entity
@Getter @Setter
public class Team {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @OneToMany(mappedBy = "team")
    private List<Member> members = new ArrayList<>(); // ArrayList를 넣어두면 null이 뜨지 않는다. -> 관례로 많이 사용
}

 

 

💡 일대다 [1 : N]

  • 실무에서 거의 사용하지 않으며, 권장하는 연관관계가 아니다.

  • 테이블의 일대다 관계에서는 무조건 '다' 쪽에 외래키가 있어야 한다
  • 객체에서는 team 이 연관관계 주인이 되는데 team 의 List members 의 변화가 있으면 테이블의 member 의 team_id 에 업데이트가 된다.
    • 즉, 객체와 테이블의 차이가 존재해서 반대편 테이블의 외래키를 관리하는 구조를 갖게 된다.

 

  • 실무에서 사용하지 않는 이유 
    • 반대편 테이블의 외래키를 관리하는 구조를 갖게 되서 헷갈릴 수 있다.
      • team entity 에서 변경이 일어나면 member 테이블에 update 되어 운영에 문제가 생길 수 있다.
    • 실무에서는 다대일 단방향 + 필요하면 양방향 추가 전략을 사용한다.

 

 

 

 

<자바 ORM 표준 JPA 프로그래밍 - 기본편 을 참고하여 작성하였습니다.>

'JPA' 카테고리의 다른 글

[Jpa] 상속관계 매핑  (0) 2023.05.22
[Jpa] 다대다 [N:N] 에 대해서  (0) 2023.05.17
[Jpa] 연관관계 매핑 기초  (0) 2023.05.01
[Jpa] 엔티티 매핑  (0) 2023.04.30
[Jpa] 영속성 컨텍스트  (0) 2023.04.27
    'JPA' 카테고리의 다른 글
    • [Jpa] 상속관계 매핑
    • [Jpa] 다대다 [N:N] 에 대해서
    • [Jpa] 연관관계 매핑 기초
    • [Jpa] 엔티티 매핑
    jiisoo
    jiisoo

    티스토리툴바