[Spring] Domain

soohee·2023년 2월 5일
0

Spring

목록 보기
2/13

Domain

알게 된 점

  1. setter은 가능하면 사용하지 말자.
    -> 변경 포인트가 너무 많아서 유지보수가 어렵다.

  2. 모든 연관관계는 지연로딩으로 설정
    -> 즉시로딩(EAGER)은 예측이 어렵고, 연관된 db내용을 다 불러옴. (n+1문제 생김)
    따라서, 실무에서는 지연로딩(LAZY)로 설정한다.
    @XToOne 관계는 디폴트가 즉시로딩이므로, 지연로딩으로 직접 설정해줘야한다.
    ! 연관된 엔티티 함께 조회해야하면, fetch join으로 가져오자 !

  3. 테이블/컬럼명 생성 바꾸려면

spring.jpa.hibernate.naming.implicit-strategy : 논리적 적용
spring.jpa.hibernate.naming.physical-strategy : 물리적 적용 (회사 룰로 변경 가능)
  1. cascade 설정해서 @XToOne 설정한 컬럼 업데이트 동시 진행할 수 있도록 해주자.
    -> 다른방법으로 양방향 연관관계 설정해주려면, setter 설정할때,

    public void setMember(Member member){
    	this.member = member;
     member.getOrders().add(this);
    }

    해주면, order.setMember(member); 코드 하나로 양방향 연관관계 메소드 생성 가능

  2. 컬렉션은 필드에서 바로 초기화 하는것이 안전하다 (null문제 해결 가능)

  3. 엔티티 자체가 해결할 수 있는 것들은 엔티티 안에서 비즈니스 로직을 생성하자. (엔티티 안에서 해결할 수 있는 로직을 도메인에 두는 것은 오히려 응집도가 높아지는 코드를 만드는 길)

profile
🐻‍❄️

0개의 댓글