단방향과 양방향이 존재하는데 orm에서는 단방향으로 설계를 해야한다.
데이터베이스는 항상 양방향으로 접근이 가능하다.
기본적으로 테이블에서 inner join으로 일대일 매칭된다고 보면 된다. 반대입장에서는 다대일이 될수가 있다.
즉 jpa를 이용한 객체간의 매핑을 하여도 기본적인 데이터베이스의 지식을 요구하고있다.
엔티티를 조회할때 해당 엔티티와 매핑된 엔티티도 한번에 조회하는것을 즉시로딩이라고 한다.
oneToOne, ManyToOne로 매핑할 겨우 즉시로딩을 기본으로 fetch전략을 가지고 있다. 하지만 기본적으로 모든면에서 지연로딩을 사용하는것이 유리하다. 내가 해깔릴때 즉시로딩을 할경우 N+1 오류가 발생되기 때문이다.
JPA의 ORM기준으로는 앙방향 매핑이 존재하지 않는다. 그래서 다대일이나 다대다로 풀어줘야한다. 일대일이건 다대일이건 어떻게 설계를 하느냐가 중요하다. 코드는 위에 작성한것과 유사하게 흘러간다. 샘플코드는 깃허브에 있으니까 중요한 부분만 정리하자.
한쪽이 일대다 반대쪽이 다대일이 된다고 해서 양방향이라 불리지만 데이터베이스와 같은 양방향 개념과는 조금 다르다.
JPA 노션정리내용
영속성 전이란 엔티티의 상태를 변경할 때 해당 엔티티와 연관된 엔티티의 상태 변화를 전파시키는 옵션이다.
일단 JPA는 꾸준히 해보고 협업에서 해보는것이 제일 좋은것 같지만 기회가 안된다면 이렇게 토이프로젝트로 공부해보는것이 좋은것 같다. 너무 자료가 방대해서 글로 쓰기보다는 내가 짠코드를 보고 다시 수정해보고 하는식으로 가보자..