[JPA] 연관관계 편의 메소드
2023. 11. 6. 13:25
728x90
기초개념
1) 단방향 : 한 쪽이 반대쪽을 참조하는 관계
양방향 : 서로가 참조하는 관계
2) 연관관계의 주인
- 연관관계는 FK로 관리
- 양방향 관계 -> 양쪽에서 매핑 -> 관리하는 주인이 필요 -> 이것이 연관관계의 주인
- 보통은 FK를 갖고 있는 엔터티가 연관관계의 주인~! (주로 n쪽) (ex. 자동차-바퀴 > 바퀴가 n이므로 주인)
** @ManyToOne (다대일 매핑) / @OneToMany (일대다 매핑) 양방향 매핑
예시 : Book과 Image로 하겠다. Book : Image = 1: n
1) Images (다대일)
@ManyToOne
@JoinColumn
private Books books;
2) Books (일대다)
: 주인이 아닌 쪽에 mappedBy속성을 넣어 매핑되는 컬럼명을 기입해서 양방향 관계를 설정한다. (주인이 아님을 명시)
@OneToMany(mappedBy = "books")
private List<Images> images = new ArrayList<>();
** @OneToOne 일대일 매핑
: 이 땐 FK를 어디에 둬도 상관없으나, 더 많이 쓰는 테이블에 FK를 넣음.
그리고 똑같이 mappedBy 설정을 넣어줘서 주인이 아님을 명시하면 된다.
연관관계 편의 메서드
-> 이것도 하나의 메서드에서 양측 관계를 설정해주어야 한다. (setter 사용할 수 밖에....)
-> 연관관계의 주인과 상관없이 자주 쓰는 쪽에 메서드를 정의해주는게 좋음.
위의 예시 이어서 Books와 Images 중 더 자주 쓰는 쪽은...? => Books
그러면 Books에서 메서드를 정의해주면 된다.
@Entity
@Table(name="books")
@Getter
public class Books {
@Id
@GeneratedValue
private Long id;
@OneToMany(mappedBy="books", cascade=CascadeType.ALL)
private List<Images> images = new ArrayList<>();
...
// 연관관계 메서드
public void addImage(Images image) {
images.add(image);
image.setBooks(this);
}
}
요렇게 메서드를 만들어주면 한쪽에서 이미지 추가 하면 다른 쪽에도 자동으로 추가가 된다는 이야기...(?)
728x90
'Programming > Spring, SpringBoot' 카테고리의 다른 글
thymleaf 설정 시 yml 파일 (0) | 2023.12.28 |
---|---|
사용중인 포트 확인 및 강제 종료 명령어 (0) | 2023.12.26 |
[JPA] 지연로딩 Lazy, 즉시로딩 Eager (0) | 2023.11.06 |
순환 참조 에러 (1) | 2023.10.31 |
REST API (Representational State Transfer) (0) | 2023.10.31 |