[Spring][10]ORM, JPA oneToMany[양방향 Mapping 실습]
BackEnd/Spring

[Spring][10]ORM, JPA oneToMany[양방향 Mapping 실습]

목차

- 양방향 Mapping

- ORM 실습

 


양방향 Mapping

 

 

양방향 Mapping test를 위해

 

DB에 테이블을 새로 만들어 줍니다.

ddl-auto: create -> none

 

그리고 아래와 같이 HeidiSQL에 접속하여 쿼리문 작성을 합니다

 

쿼리문 작성 후 실행

 

추가되는 모습과 post확인

 

Readme에 더미 데이터를 추가해줍니다.

 

더미데이터 추가

 

 

/test/post url로 테스트해봅시다.

 

table값이 response됩니다

 

 

/test/post/1

 

1번의 posts table값들

 

post에 잘 담겨 있네요.

 


ORM 실습

 

이제 포스트와 유저와 합쳐주어야 합니다.

 

보통 한 명의 사람여러 포스팅을 하죠?

제가 블로그 포스팅하는 것처럼요

 

 

아래와 같이 추가해주면 이제 양방향 Mapping이 가능해집니다.

즉, User 한 명에 여러 post를 연결해준다는 것입니다.

 

post의 포린 키를 user에 맞게 가지고 와서 연결해줍니다.

 

여기서

 

(

user: post

1   : N

)

 

그러므로 posts에 포린 키를 설정합니다.

(oneToMany를 넣습니다)

 

@OneToMany가 추가된 모습

 

@OneToMany를 추가해줍니다

여기서 User one이면 PostsMany이기 때문입니다.

(mappedBy="user")를 추가해줍니다.

"user"는 포린 키로 쓰지 않겠다는 약속입니다.

 

user는 포린키가 아닙니다.(라는 뜻)

 

getter, setter도 추가해줍니다.

 

그래야 JPADBposts에 접근 가능합니다.

(private으로 묶여 있기 때문에)

 

 

getter, setter 추가

 

이렇게만 하면

user를 불러올 때 post도 불러오게 되는데,

 

user안에 post가 있으며 (user가 쓴 post)

posts들로 되어있습니다. 

 

그리고 그 posts들 안에 user가 있는 것이죠

(누가 썼는지 알려줘야 함, 즉 post도 user객체를 가짐, 포린 키끼리 연결고리를 가짐)

 

그렇기 때문에 아래처럼 무한으로 join 하게 되어 우리에게 보여줍니다.

(마치 포린 키끼리 계속 서로를 부르는 것과 같음)

(서로 객체를 부르기 때문에, posts는 user를 user는 또 posts를... 무한반복..)

 

이게 ORM 양방향 Mapping이 된 것입니다.

 

그렇지만 이렇게 사용할 수는 없겠죠?

 

무한반복

 

그래서 @JsonIgnoreProperties를 추가해줍니다.

 

@JsonIgnoreProperties를 추가해주면 이제 무한으로 join 되지 않습니다.

왜냐하면 user를 무시해버려라는 @이기 때문입니다.

 

이렇게 하면 posts안에 user불러오지 않게 합니다.

 

@JsonIgnoreProperties

 

그리고 다시 확인해보면

아래처럼 posts객체를 불러오되 posts객체user객체를 불러오지 않습니다.

(위에 @JsonIgnoreProperties 덕분)

 

합쳐진 상태

 

userpost들이 (무한반복 없이) 담겨집니다.