연관관계 매핑 종류

  • 1. 일대일(1:1) : @OneToOne
  • 2. 일대다(1:N) : @OneToMany
  • 3. 다대일(N:1) : @ManyToOne
  • 4. 다대다(N:N) : @ManyToMany

연관관계 방향성

단방향과 양방향이 존재하는데 orm에서는 단방향으로 설계를 해야한다.
데이터베이스는 항상 양방향으로 접근이 가능하다.

일대일 단방향 매핑

기본적으로 테이블에서 inner join으로 일대일 매칭된다고 보면 된다. 반대입장에서는 다대일이 될수가 있다.

  • @OneToOne 어노테이션을 이용해 회원 엔티티와 일대일로 매핑을 합니다.
  • @JoinColumn으로 외래키를 지정한다.

즉 jpa를 이용한 객체간의 매핑을 하여도 기본적인 데이터베이스의 지식을 요구하고있다.

엔티티를 조회할때 해당 엔티티와 매핑된 엔티티도 한번에 조회하는것을 즉시로딩이라고 한다.

oneToOne, ManyToOne로 매핑할 겨우 즉시로딩을 기본으로 fetch전략을 가지고 있다. 하지만 기본적으로 모든면에서 지연로딩을 사용하는것이 유리하다. 내가 해깔릴때 즉시로딩을 할경우 N+1 오류가 발생되기 때문이다.

다대일 단방향 매핑

JPA의 ORM기준으로는 앙방향 매핑이 존재하지 않는다. 그래서 다대일이나 다대다로 풀어줘야한다. 일대일이건 다대일이건 어떻게 설계를 하느냐가 중요하다. 코드는 위에 작성한것과 유사하게 흘러간다. 샘플코드는 깃허브에 있으니까 중요한 부분만 정리하자.

한쪽이 일대다 반대쪽이 다대일이 된다고 해서 양방향이라 불리지만 데이터베이스와 같은 양방향 개념과는 조금 다르다.

JPA 노션정리내용

영속성 전이

영속성 전이란 엔티티의 상태를 변경할 때 해당 엔티티와 연관된 엔티티의 상태 변화를 전파시키는 옵션이다.

    CaseCade종류
  • Persist : 부모 엔티티가 영속화 될때 자식 엔티티도 영속화
  • Merge : 부모 엔티티가 병합될 때 자식 엔티티도 병합
  • Remove : 부모 엔티티가 삭제될때 연관된 자식 엔티티도 삭제
  • Refresh : 부모 엔티티가 refresh되면 연관된 자식 엔티티도 refresh
  • Detach : 부모 엔티티가 detach되면 연관된 자식 엔티티도 detach 상태로 변경
  • All : 부모 엔티티의 영속화 상태 변화를 자식 엔티티에 모두 전이

이번 챕터의 나의 생각

일단 JPA는 꾸준히 해보고 협업에서 해보는것이 제일 좋은것 같지만 기회가 안된다면 이렇게 토이프로젝트로 공부해보는것이 좋은것 같다. 너무 자료가 방대해서 글로 쓰기보다는 내가 짠코드를 보고 다시 수정해보고 하는식으로 가보자..

profile
긍정적인 삶을 갖자~~

0개의 댓글