JPA의 Entity에서 1대N 관계를 설정하기 위해서는 @ManyToOne과 @OneToMany를 사용한다.
예를들어, 게시판에는 여러 개의 댓글을 달 수 있으므로 둘은 1대N 관계이다.
* cascade = CascadeType.All, orphanRemoval = true 이 둘을 모두 설정하면 부모 엔티티로 자식 엔티티의 생명주기를 관리할 수 있다.
public class Board {
...
@OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Comment> comments;
}
public class Comment {
...
@ManyToOne
@JoinColumn(name = "board_sn", insertable = false, updatable = false)
private Board board;
}
@OneToMany | 현재 엔티티가 1인 경우 |
@ManyToOne | 현재 엔티티가 N인 경우 |
@JoinColumn | Comment를 조회할 때 필드인 Board를 함께 조회하기 위한 설정 |
@OneToMany
mappedBy | 어떤 엔티티와 매핑되었는지 명시 위 예시에서의 board는 Comment 엔티티의 멤버변수로 선언된 'private Board board;'를 가리킴 |
cascade | 부모 엔티티의 설정에 따라 자식 엔티티의 설정을 연쇄적으로 변환하기 위한 설정 |
orphanRemoval | 부모 엔티티에서 제거된 자식 엔티티를 고아 객체라고 하는데 이 고아 객체를 삭제할 지 여부 설정 |
* cascade의 타입
CascadeType.PERSIST | 저장할 때 연관된 엔티티도 함께 저장 |
CascadeType.REMOVE | 삭제할 때 연관된 엔티티도 함께 삭제 |
CascadeType.MERGE | 업데이트할 때 연관된 엔티티도 함께 업데이트 |
CascadeType.DETACH | detached 상태로 만들 때 연관된 엔티티도 함께 detached 상태로 만듬 |
CascadeType.ALL | 모두 사용 |
@JoinColumn
name | Comment를 조회할 때 필드인 Board를 함께 조회하기 위한 설정 |
insertable | Comment 엔티티의 INSERT에서 해당 필드를 사용할지 여부를 설정 |
updateable | Comment 엔티티의 UPDATE에서 해당 필드를 사용할지 여부를 결정 |
'Java > Spring Boot' 카테고리의 다른 글
[Spring Boot] JpaRepository의 쿼리 메서드 자동 구현 (0) | 2023.04.11 |
---|---|
[Spring Boot] JpaRepository에서 @Query 사용하기 (0) | 2023.04.10 |
[Spring Boot] JPA의 복합키 (0) | 2023.04.09 |
[Spring Boot] Controller 예외처리 (0) | 2023.04.09 |
[Spring Boot] 외부 properties 파일 불러오기 (0) | 2023.04.03 |