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<>();
...
}