notepad

[JPA 활용1] 요약 본문

JPA

[JPA 활용1] 요약

likewise_ 2020. 8. 7. 16:20

인프런 - 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

엔티티 클래스 개발

  1. 다대다 관계는 사용하지 않는다. 일대다, 다대다 관계로 풀어낸다. @OneToMany - @ManyToOne

  2. 일대다, 다대일 양방향 관계에서의 연관관계 주인 정하기

    • 외래키가 있는 쪽(다 쪽)을 연관 관계 주인으로 정한다

    • 1:N 관계 예 - 회원(1):주문(N) 인 경우

      ...
      @Entity
      class Member {
        //Member가 One, Order가 Many이다
        //연관관계 One쪽에 mappedBy를 추가해준다. 추가되는 값은 Many 쪽에 선언된 필드명이다
        @OneToMany(mappedBy = "member")
        private List<Order> orders = new ArrayList<>();
      
      }
      @Entity
      @Table(name = "orders")
      class Order {
      
        //다 쪽에 조인 컬럼을 추가한다 xxxToOne 관계는 항상 지연 로딩을 설정해준다. toMany는 default가 Lazy
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "member_id")
        private Member member;
      }
  3. 엔티티에서 세터는 가급적 세터를 사용하지 말고 의미있는 메서드를 만들어 사용한다.

  4. 모든 연관관계는 지연로딩으로 설정하자. 즉시로딩은 예측이 어렵고 N+1 문제가 발생한다. xxxToOne 관계는 지연로딩을 별도로 설정해준다.

  5. 양방향 연관관계의 값 세팅을 위한 연관관계 편의 메서드를 엔티티에 추가하여 객체의 응집도를 높인다.

  6. 컬렉션은 필드에서 바로 초기화하는 것이 null 문제에서 안전하다

  7. 값타입(임베디드 타입) 은 불가능하게 설계해야한다. @Setter를 제거하고 생성자에서 값을 모두 초기화해서 불변 클래스를 만들자. 엔티티나 임베디드 타입의 디폴트 생성자는 public ~ protected 설정이 안전하다.

  8. 의존성 주입은 생성자 주입 방식을 사용하면 변경 불가능한 객체로 생성 가능하다

  9. 실무에서 엔티티는 핵심 비즈니스 로직만 가지고 화면을 위한 로직 등은 폼객체를 만들거나 DTO를 사용한다 엔티티는 순수하게!

  10. 엔티티가 변경될 때는 변경감지!

키워드

@PersistenceContext
@Embeded @Embedable
@Enumerated(EnumType.String)
@ManyToOne @JoinColunm
Cascade = CascadeType.All
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = “dtype”) @DiscriminatorValue(“B”)
@Transactional
도메인 모델 패턴 (엔티티가 비즈니스 로직을 가지고 객체 지향의 특성을 적극 활용) 과
트랜잭션 스크립트 패턴 (엔티티에는 비즈니스 로직이 거의 없고 서비스 계층에서 대부분 비즈니스 로직을 처리)

'JPA' 카테고리의 다른 글

[JPA 활용2] 기본~ 고급 요약  (0) 2020.08.07
[JPA 활용2] 고급 - 지연 로딩과 조회 성능 최적화  (0) 2020.08.05
[JPA 활용2] API 개발 기본  (0) 2020.08.03
[JPA-BASIC] 엔티티 매핑  (0) 2020.07.17
[JPA-BASIC] 영속성 관리  (0) 2020.07.16
Comments