Post 클래스에서 foreign key로 썼던 userId를 지우고 User 오브젝트 타입의 변수를 선언해 ORM을 해줍니다.
getter와 setter를 생성해줍니다.
테이블에는 오브젝트를 담을 수 없습니다. 따라서 User 오브젝트의 id가 foreign key 역할을 할 것이라고 알려주어는 @ManyToOne annotation을 붙여줍니다. 여기서 Many는 post, One은 user 입니다.
@ManyToOne annotation은 user의 기본키를 foreign key로 인식해줍니다.
서버를 실행시켜보면 post 테이블에 user_id라는 foreign key가 생성된 것을 확인 할 수 있습니다.
테스트를 위해 더미값을 insert 해줍니다.
현재까지는 데이터베이스에 다른 설정은 안해주고 Post 클래스에 ORM을 해준 것 밖에 없습니다.
PostApiRepositoryTest 클래스에 접근할 주소를 매핑해주는 메서드를 만들어줍니다.
브라우저에서 접근해보면
post에서 매핑 했는데도 join한 데이터를 반환하는 것을 볼 수 있습니다.
object relation 된 것을 볼 수 있습니다.
console 창을 보면
join하는 쿼리문을 실행시켜주는 것을 확인할 수 있습니다.
아이디를 통해서도 데이터를 불러올 수 있습니다.
브라우저에서 접근해보면
잘 실행되는 것을 볼 수 있습니다. console창을 보면
left outer join 를 해준 쿼리문을 볼 수 있습니다.
post 테이블을 기준으로 left outer join을 해주는 이유는 데이터를 읽는 횟수가 훨씬 줄어들기 때문입니다.
post 테이블의 foreign key가 user 테이블의 id 값이기때문에 하나밖에 없는 것을 이용하여 데이터를 찾으면 바로 가져오고 post 테이블의 다음 데이터로 넘어가는 것입니다. user 테이블에서 post 테이블의 foreign key와 일치하는 id를 찾으면 하나밖에 없기 때문에 이를 이용한 것입니다.
'웹개발 > Springboot' 카테고리의 다른 글
양방향 매핑 - @OneToMany, @JasonIgnoreProperties (0) | 2021.07.17 |
---|---|
DB 데이터 활용하기 - 테이블 join (0) | 2021.07.03 |
[블로그 만들기] DB 활용하기 - 로그인, 로그아웃 (0) | 2021.07.03 |
댓글