양방향 매핑에 대한 깊이 있는 탐구

Ryu·2023년 2월 20일
0

JPA

목록 보기
4/4

양방향 매핑, 굳이 할 필요 없다?

아마 JPA를 조금이라도 공부해 본 사람이라면 양방향 매핑을 굳이 할 필요가 없다고 배웠을 것이다.
그렇다면 왜 양방향 매핑 없이도 ORM 설계가 완료될 수 있을까?

  • 우선, ORM 매핑의 핵심은 관계형 데이터베이스(테이블)에 객체를 저장할 수 있어야 한다. 테이블은 외래 키 하나로 연관관계 테이블을 관리하므로, 애초에 두 객체 간 각각 참조로 관리한다는게 테이블 입장에서는 이해가 안 되는 방식인 것이다.
  • ORM 설계 후 간단한 토이 프로젝트를 진행하는 도중 특정 테이블의 값이 저장되지 않는 문제를 맞닥뜨렸다...

실제로 마주친 에러는 다음과 같다.

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1025E: The collection has '0' elements, index '0' is invalid

Thymeleaf 에서 특정 객체의 참조가 컬렉션인데, 그 컬렉션에 값이 아무것도 안 들어있다는 것이다.
실제로 DB 를 확인했더니, 해당 컬렉션 엔티티에 아무 값이 들어 있지 않았다.

빠른 테스트를 위해 초기데이터들을 넣어놓고 다양한 시도를 해보았다.
1:N 에서는 N 쪽이 연관관계 주인이라고 들어서 N 쪽에서 1 을 setter 메서드로 설정도 해보았고, Cascade 옵션도 다시 확인해보았지만 계속해서 같은 에러가 발생했다.

해결은 생각보다 간단했다.
애초에 코드가 1 쪽에서 N 을 넣어주는 방식으로 짰기 때문에, '양방향 매핑'을 해줬어야 했다...
내가 진행한 프로젝트에서는 양방향 매핑을 배제한 상태에서, 1 쪽에서 N 인 컬렉션들을 넣어주려 했기 때문에 에러가 발생한 것이다.

profile
Strengthen the core.

0개의 댓글