setter은 가능하면 사용하지 말자.
-> 변경 포인트가 너무 많아서 유지보수가 어렵다.
모든 연관관계는 지연로딩으로 설정
-> 즉시로딩(EAGER)은 예측이 어렵고, 연관된 db내용을 다 불러옴. (n+1문제 생김)
따라서, 실무에서는 지연로딩(LAZY)로 설정한다.
@XToOne 관계는 디폴트가 즉시로딩이므로, 지연로딩으로 직접 설정해줘야한다.
! 연관된 엔티티 함께 조회해야하면, fetch join으로 가져오자 !
테이블/컬럼명 생성 바꾸려면
spring.jpa.hibernate.naming.implicit-strategy : 논리적 적용
spring.jpa.hibernate.naming.physical-strategy : 물리적 적용 (회사 룰로 변경 가능)
cascade 설정해서 @XToOne 설정한 컬럼 업데이트 동시 진행할 수 있도록 해주자.
-> 다른방법으로 양방향 연관관계 설정해주려면, setter 설정할때,
public void setMember(Member member){
this.member = member;
member.getOrders().add(this);
}
해주면, order.setMember(member); 코드 하나로 양방향 연관관계 메소드 생성 가능
컬렉션은 필드에서 바로 초기화 하는것이 안전하다 (null문제 해결 가능)
엔티티 자체가 해결할 수 있는 것들은 엔티티 안에서 비즈니스 로직을 생성하자. (엔티티 안에서 해결할 수 있는 로직을 도메인에 두는 것은 오히려 응집도가 높아지는 코드를 만드는 길)