JPA 연관관계의 주인

김형민·2021년 10월 12일
0


예를들어

MyBatis에서 게시글 하나를 조회 한다면

작성자 - user 테이블
게시글 - board 테이블
댓글 - reply 테이블

select  * from
	board b
    left join user u on user.id = u.id = b.userId
    left join reply r on r.id = r.id = b.userId
    where b.id = 1

이런식으로 조인을 이용한 쿼리문을 작성해야한다.


JPA에선

아래 쿼리를 작성하면 jpa는 자동으로 join을 해준다.

select  * from
	where id = 1;

JAVA > JPA > DB

jpa는 board라는 모델이 필요함을 인식하고
"Entity설정시 board는 user라는 object을 들고 있다"
라고 인식을해 jpa는 join을 자동으로 날려준다.

1개의 게시글엔 1명의 게시자가 오고 여러개의 댓글이 올 수 있다.

	@ManyToOne(fetch = FetchType.EAGER) 
	// EAGE전략 1:1의 정보 무조건 들고와야하는 정보 
	// ManyToOne = Board, User = One 한명의 유저는 여러 게시글 작성할 수 있음을 선언! 
	@JoinColumn(name="userId")
	// userId라는 key로 들어감
	private User user; // DB는 오브젝트 저장불가 Foreign key, 자바는 오브젝트를 저장할 수 있다. 자바는 DB에 맞춰 key값을 
	
	@OneToMany(mappedBy="board", fetch=FetchType.EAGER)
	// 댓글 펼치기 버튼이 있이 있으면 LAZY전략 > 없으면 데이터를 안들고옴
	// mappedBy가 있으면 연관관계의 주인이 아니다 db에 컬럼을 만들지 말라고 선언 
	// fk는 reply테이블의 board
	// board를 select 할때 join문을 통해 값을 얻기 위해 있다
	private List<Reply> reply;

그러나 user 뿐만 아니라 댓글 reply정보도 필요한데

그러나 어떻게 보면 필요없는 데이터(*)도 들고 올 수 있다.

profile
항해 중인 개발자

0개의 댓글