[Spring Boot] JPA 연관관계 매핑
2021. 3. 9. 15:12ㆍSpring/Spring Boot
1. JPA 연관관계 매핑
1) 주요 용어
- 방향
- 단방향 (한쪽만 참조)
- 양방향 (서로 참조)
- 다중성
- 일대일 관계
- 일대다 관계
- 다대일 관계
- 다대다 관계
- 연관관계의 주인
- 객체를 양방향 연관관계를 만들기 위해서는 연관관계 주인을 정해야한다. 일반적으로 다대일, 일대다 관계에서 연관관계의 주인은 '다'에 해당하는 객체이다.
2) 단방향 연관관계
- '한명의 회원은 여러 게시글을 이용할 수 있다.'
Board에서 Member로 접근하는 단방향 매핑
@Getter
@Setter
@ToString
@Entity
public class Member {
@Id
@Column(name = "MEMBER_ID")
private Long id;
private String password;
private String name;
private String role;
}
@Getter
@Setter
@ToString
@Entity
public class Board {
@Id
@GeneratedValue
private Long id;
private String title;
private String content;
@ManyToOne
@JoinColumn(name = "MEMBER_ID", nullable = false)
private Member member;
}
※ @JoinColumn 어노테이션에 nullable 속성을 추가한 이유는, 실행할 때 외부 조인이 아닌 내부 조인을 하기 위해서이다.
2) 양방향 연관관계
@Getter
@Setter
@ToString
@Entity
public class Member {
@Id
@Column(name = "MEMBER_ID")
private Long id;
private String password;
private String name;
private String role;
@OneToMany(mappedBy = "member")
@ToString.Exclude
private List<Board> boardList = new ArrayList<>();
}
※ mappedBy로 member가 연관관계의 주인이라고 지정
@Getter
@Setter
@ToString
@Entity
public class Board {
@Id
@GeneratedValue
private Long id;
private String title;
private String content;
@ManyToOne
@JoinColumn(name = "MEMBER_ID", nullable = false)
@ToString.Exclude
private Member member;
}
※ @ToString.Exclude는 양방향 관계에서 @ToString이 상호 호출을 하기에 StackOverflowError가 발생하는 것을 방지하기 위해 설정
Cascade 설정으로 영속성 전이(부모 엔티티 저장, 삭제 시 자식 엔티티도 저장, 삭제)가 가능하도록 한다.
@Getter
@Setter
@ToString
@Entity
public class Board {
@Id
@GeneratedValue
private Long id;
private String title;
private String content;
@ManyToOne
@JoinColumn(name = "MEMBER_ID", nullable = false, cascade = CascadeType.All)
@ToString.Exclude
private Member member;
}
[참고] Spring - Spring - 참고 사항
728x90
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] Logback (0) | 2021.03.31 |
---|---|
[Spring Boot] 웹 프로젝트 생성, 프로젝트 분리, Gradle 테스트 (0) | 2021.03.22 |
[Spring Boot] Spring Boot, JWT, OAuth2 (2) (1) | 2021.03.06 |
[Spring Boot] Spring Boot, JWT, OAuth2 (1) (0) | 2021.03.04 |