JPA

[JPA] 8. 연관관계 매핑 - 다대일(N : 1)

inuma 2021. 1. 10. 23:16
프로젝트 git url github.com/rtef23/JpaStudy
필요 1. docker
2. docker-compose
프로젝트 정보 mysql : 5.7 - docker image
java : 1.8

 

다대일(N : 1), '다'가 연관관계의 주인의 경우

  • @ManyToOne 
    • optional ; false로 설정하면 연관된 엔티티가 항상 있어야 한다.
    • fetch ; 글로벌 페치 정략을 설정한다.
    • cascade ; 영속성 전이 기능을 사용한다.
    • targetEntity ; 연관된 엔티티의 타입 정보를 설정한다.
  • @ManyToOne에는 mappedBy가 없지만 @OneToMany에는 mappedBy가 있다.
    • > ManyToOne 어노테이션을 사용한 곳은 연관관계의 주인이 된다.
  • Member, Team의 관계는 다대일(N : 1) 관계이다.(Team 입장에서는 일대다(1 : N)의 관계)
@Entity
@Table(name = "USER")
public class User {
  @Id
  @GeneratedValue
  @Column(name = "user_id")
  private Long id;

  @ManyToOne
  @JoinColumn(name = "team_id")
  private Team team;

  @Column(name = "username")
  private String username;
  
  ...
}

@Entity
@Table(name = "TEAM")
public class Team {
  @Id
  @GeneratedValue
  @Column(name = "team_id")
  private Long id;

  @Column(name = "name")
  private String name;
  
  ...
}

 

  • Team과 User의 연관관계의 주인이 User의 경우 양방향 연관관계의 코드
@Entity
@Table(name = "USER")
public class User {
  @Id
  @GeneratedValue
  @Column(name = "user_id")
  private Long id;

  @Column(name = "username")
  private String username;

  @ManyToOne
  @JoinColumn(name = "team_id")
  private Team team;
  
  ...
}

@Entity
@Table(name = "TEAM")
public class Team {
  @Id
  @GeneratedValue
  @Column(name = "team_id")
  private Long id;

  @Column(name = "name")
  private String name;

  @OneToMany(mappedBy = "team")
  private List<User> users = new ArrayList<>();
  
  ...
}

 

'JPA' 카테고리의 다른 글

[JPA] 10. 연관관계 매핑 - 일대일(1 : 1)  (0) 2021.01.11
[JPA] 9. 연관관계 매핑 - 일대다(1 : N)  (0) 2021.01.11
[JPA] 7. 연관관계  (0) 2021.01.06
[JPA] 6. 엔티티 매핑  (0) 2021.01.05
[JPA] 5. 영속성 컨텍스트 - 2  (0) 2020.12.31