[JPA] 엔티티 설계시 주의할 점

이준영·2022년 10월 7일
0

스프링 - JPA

목록 보기
6/11

엔티티 설계시 주의할 점에 대해서 알아보자

  1. 엔티티에는 가급적 Setter를 사용하지 말자

Setter가 열려있어서 Setter를 통해 데이터를 변경하게 되면 변경 포인트가 너무 많아서 유지보수가 어려워진다

  1. 모든 연관관계는 지연로딩으로 설정해야한다!!!

⭐️매우매우매우 중요해보인다.⭐️

즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다고 한다. 예를 들어 100개의 sql문을 가져왔는데 100개 각각마다 또 다른 테이블을 참조하고 있으면 대참사..!

실무에서 모든 연관관계는 지연로딩(LAZY)으로 설정해야 한다.

즉, @__ToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정한다

프로젝트 파일 눌러놓고 command + shift + T 누르면 이렇게 모든 코드를 검색할 수 있다
여기서 바꿔주기!!

  1. 컬렉션은 필드에서 초기화 하자.

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

테이블, 컬럼명 생성 전략

스프링 부트에서 하이버네이트 기본 매핑 전략을 변경해서 실제 테이블 필드명은 다르다

스프링 부트 신규 설정 (엔티티(필드) 테이블(컬럼))

  1. 카멜 케이스 언더스코어(memberPoint memberpoint) 2. .(점) (언더스코어)
  2. 대문자 소문자

적용 2 단계

  1. 논리명 생성: 명시적으로 컬럼, 테이블명을 직접 적지 않으면 ImplicitNamingStrategy 사용
    spring.jpa.hibernate.naming.implicit-strategy : 테이블이나, 컬럼명을 명시하지 않을 때 논리명 적용

  2. 물리명 적용:
    spring.jpa.hibernate.naming.physical-strategy : 모든 논리명에 적용됨, 실제 테이블에 적용

이건 더 찾아보면서 공부해야 될 것 같다.

profile
화이팅!

0개의 댓글