프레임워크/Spring, Spring Boot
[메타코딩] 스프링부트 강좌 22강(블로그 프로젝트) - 연관관계의 주인
고용인
2022. 7. 27. 11:42
연관관계 주인 = FK를 가진 오브젝트
SELECT * FROM Board WHERE Id = 1;
한개의 Board를 조회하기 위해서는 Board, User, Reply 객체를 조회해야합니다.
이때 하나의 Board에는 하나의 User와 여러개의 Reply가 존재하게 됩니다.
@ManyToOne(fetch = FetchType.EAGER) // Many = Board, User = One
@JoinColumn(name = "userId")
private User user; //DB는 오브젝트를 저장할 수 없다. FK, 자바는 오브젝트를 저장할 수 있다.
@OneToMany(mappedBy = "board", fetch = FetchType.EAGER) // mappedBy 연관관계의 주인이 아니다 (난 FK가 아니에요) DB에 컬럼을 만들지 마세요.
private List<Reply> reply;
이때 reply는 FK가 아닙니다.
(FK를 설정할때만 JoinColumn 어노테이션이 사용됩니다.)
만약 reply를 FK로 설정하게 되면, 1정규화(원자성)를 어기게 됩니다.
mappedBy 속성을 통하여 Reply객체의 board값을 매핑시켜줍니다.
(mappedBy의 의미는 난 연관관계의 주인이 아니며, FK를 만들지 말라는 의미입니다.)
ManyToOne 어노테이션의 기본 패치 전략은 EAGER입니다.
OneToMany 어노테이션의 기본 패치 전략은 LAZY입니다.
바로 보여 줄 필요가 없을때는 LAZY 전략이 맞으나, 바로 보여줘야하는 정보에 대해서는 EAGER전략으로 가야합니다.
(EAGER : 무조건 들고와)
강의 주소 : https://youtu.be/DtMmXQl4_hw