연관관계 주인 = 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

+ Recent posts