Spring Data JPA - 연관 관계 Annotation

몽루문·2023년 2월 27일
0

Spring Data JPA

목록 보기
3/7
post-thumbnail

📝 JPA의 연관관계 Annotation 대하여

Spring Data JPA를 사용하여 프로젝트를 진행하면서 사용하였던 JPA 연관관계 Annotation에 대하여 정리해보려고 한다.




🚩 @JoinColumn


📝 설명

  • FK를 가지고 있는 Database Column에 사용

🔨 설정 옵션

■ Name

  • JPA에서 사용할 Entity의 이름을 지정한다. 지정하지 않을 경우 Class 이름을 사용



🚩 @ManyToOne


📝 설명

  • N:1 관계에 사용하는 Annotation
  • FK를 가지고 있는 쪽( 주인 Entity )에서 사용

🔨 설정 옵션

■ targetEntity ( 필수 )

  • N:1 관계에서 1인 Entity의 class 명을 지정할때 사용한다.

■ fetch

  • N:1 관계에서 1인 Entity를 참조하는 방식을 설정하는 옵션

  • FetchType.EAGER ( Default )

    • 참조되는 Entity를 Join을 이용하여 한번에 가져오는 방식
    • 기본값으로서 Query가 한번만 나간다는 장점이 있음
  • FetchType.Lazy

    • 참조되는 Entity가 Service 로직상에서 참조될때 가져오는 방식
    • 참조될때마다 Query가 나가지만 Join을 하지 않고 가져오기 때문에 속도 자체가 빠름
    • 서비스 로직에 for loop가 있다면 주의하여 사용하여야 한다.



🚩 @OneToMany


📝 설명

  • N:1 관계에 사용하는 Annotation
  • FK를 없는 쪽( 자식 Entity )에서 사용
  • @OneToMany Annotation의 경우 자식의 입장이므로 Select 기능만 가능하다

🔨 설정 옵션

■ mappedBy

  • N:1 관계에서 N인 Entity의 이름을 지정할떄 사용된다.

■ fetch

  • N:1 관계에서 N인 Entity를 참조하는 방식을 설정하는 옵션

  • FetchType.EAGER

    • 참조되는 Entity를 Join을 이용하여 한번에 가져오는 방식
    • 기본값으로서 Query가 한번만 나간다는 장점이 있음
  • FetchType.Lazy ( Default )

    • 참조되는 Entity가 Service 로직상에서 참조될때 가져오는 방식
    • 참조될때마다 Query가 나가지만 Join을 하지 않고 가져오기 때문에 속도 자체가 빠름
    • 서비스 로직에 for loop가 있다면 주의하여 사용하여야 한다.



🚩 @OneToOne


📝 설명

  • 1:1 관계에 사용하는 Annotation
  • FK를 가지고 있는 쪽( 주인 Entity )에서 사용
  • FK는 개발자가 설계한 ERD에 따라서 결정된다.

🔨 설정 옵션

■ targetEntity ( 필수 )

  • 1:1 관계에서 자식 Entity의 class 명을 지정할때 사용한다.

■ fetch

  • 1:1 관계에서 1인 Entity를 참조하는 방식을 설정하는 옵션

  • FetchType.EAGER ( Default )

    • 참조되는 Entity를 Join을 이용하여 한번에 가져오는 방식
    • 기본값으로서 Query가 한번만 나간다는 장점이 있음
  • FetchType.Lazy

    • 참조되는 Entity가 Service 로직상에서 참조될때 가져오는 방식
    • 참조될때마다 Query가 나가지만 Join을 하지 않고 가져오기 때문에 속도 자체가 빠름
    • 서비스 로직에 for loop가 있다면 주의하여 사용하여야 한다.



🚩 @ManyToMany


📝 설명

  • N:N 관계에서 사용하는 Annotation
  • RDB에서 N:N 관계는 사용하지 않으므로 사용하지 않는 Annotation



📌 마무리

Spring Data JPA를 사용하여 프로젝트를 진행하면서 연관관계에 사용한 JPA Annotation들을 정리하였다. 정리하면서 느꼈지만 JPA의 연관관계 Annotation들을 너무 한정적으로 사용한거 같고 이해도도 아직 부족한거 같다. 시간날때마다 공부해서 틈틈히 내용을 채워봐야겠다.

profile
알고 있는 것을 정리하고, 새로운 것을 알기위해 끄적이는곳..

0개의 댓글