목차
- 양방향 Mapping
- ORM 실습
양방향 Mapping
양방향 Mapping test를 위해
DB에 테이블을 새로 만들어 줍니다.
ddl-auto: create -> none
그리고 아래와 같이 HeidiSQL에 접속하여 쿼리문 작성을 합니다
Readme에 더미 데이터를 추가해줍니다.
/test/post url로 테스트해봅시다.
/test/post/1
post에 잘 담겨 있네요.
ORM 실습
이제 포스트와 유저와 합쳐주어야 합니다.
보통 한 명의 사람이 여러 포스팅을 하죠?
제가 블로그 포스팅하는 것처럼요
아래와 같이 추가해주면 이제 양방향 Mapping이 가능해집니다.
즉, User 한 명에 여러 post를 연결해준다는 것입니다.
post의 포린 키를 user에 맞게 가지고 와서 연결해줍니다.
여기서
(
user: post
1 : N
)
그러므로 posts에 포린 키를 설정합니다.
(oneToMany를 넣습니다)
@OneToMany를 추가해줍니다
여기서 User가 one이면 Posts가 Many이기 때문입니다.
(mappedBy="user")를 추가해줍니다.
"user"는 포린 키로 쓰지 않겠다는 약속입니다.
getter, setter도 추가해줍니다.
그래야 JPA나 DB나 posts에 접근 가능합니다.
(private으로 묶여 있기 때문에)
이렇게만 하면
user를 불러올 때 post도 불러오게 되는데,
user안에 post가 있으며 (user가 쓴 post)
posts들로 되어있습니다.
그리고 그 posts들 안에 user가 있는 것이죠
(누가 썼는지 알려줘야 함, 즉 post도 user객체를 가짐, 포린 키끼리 연결고리를 가짐)
그렇기 때문에 아래처럼 무한으로 join 하게 되어 우리에게 보여줍니다.
(마치 포린 키끼리 계속 서로를 부르는 것과 같음)
(서로 객체를 부르기 때문에, posts는 user를 user는 또 posts를... 무한반복..)
이게 ORM 양방향 Mapping이 된 것입니다.
그렇지만 이렇게 사용할 수는 없겠죠?
그래서 @JsonIgnoreProperties를 추가해줍니다.
@JsonIgnoreProperties를 추가해주면 이제 무한으로 join 되지 않습니다.
왜냐하면 user를 무시해버려라는 @이기 때문입니다.
이렇게 하면 posts안에 user를 불러오지 않게 합니다.
그리고 다시 확인해보면
아래처럼 posts객체를 불러오되 posts객체는 user객체를 불러오지 않습니다.
(위에 @JsonIgnoreProperties 덕분)
user에 post들이 (무한반복 없이) 담겨집니다.
'BackEnd > Spring' 카테고리의 다른 글
[Spring][12]API 활용하기 (0) | 2021.07.10 |
---|---|
[Spring][11]JPA fetchType, Mapping, Open-in-view[양방향 맵핑 정리,LAZYloading] (0) | 2021.07.09 |
[Spring][9]RDB, Object Relationship Mapping in Spring[관계형 데이터베이스, ORM] (0) | 2021.07.07 |
[Spring][8]Login Practice[로그인 실습] (0) | 2021.07.04 |
[Spring][7]Join practice[회원가입 실습] (0) | 2021.07.01 |