* Setter제거
문제 : Setter 무분별허용 => 오브젝트가 어디서 수정됬는지 모름 => 유지보수어렵
해결? : ??? 뒷강의(어플개발강의)에서 Setter없이 개발하는것을 보여주겠다.
*LAZY(지연로딩)
※ 절대 Eager을 사용하면 안된다.
문제 : @XToOne 은 기본값이 즉시로딩(Eager) => 연관된애들 다땡겨옴, N(결과쿼리)+1(Order 쿼리) 문제.
해결 : @XToOne(fetch=FetchType.LAZY)
1. 패키지에서 C Shift F : OneToOne, ManyToOne 모두 찾기
2 . fetch 변경
@OneToOne(fetch = LAZY,mappedBy = "delivery")
private Order order;
*컬렉션 초기화 문제
문제 : 메소드초기화등등 사용하면 -> 널문제, 하이버네이트 매커니즘 안맞음 문제
해결 : 필드에서 초기화 하라.
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems= new ArrayList<>();
*DB이름 명명규칙
기본 : 캐멀->언더 (javaSpring ->java_spring)
문제 : 회사에서 앞에 커스텀 XXorder등 붙이라고함
해결 : ImplicitNamingStrategy 수정하면됨.
*Casade
기존문제 : persist(orderItemA) persist(orderItemB) persist(orderItemC) 각각저장후 persist(order) 저장 해야함.
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems= new ArrayList<>();
persist(orderItemA);
persist(orderItemB);
persist(orderItemC);
persist(order);
해결: Cascade => persist자동전파.
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> orderItems= new ArrayList<>();
persist(order);
* 연관관계 편의 메서드
기존 : 운영단계에서 member에 order넣고, order에 멤버넣어야됨. => 누락문제
public void setMember(Member member){
this.member=member;
}
public static void main(String[] args){
Member member=new Member();
Order order=new Order();
member.getOrders().add(order);
order.setMember(member);
}
해결 : 연관관계 편의 메서드 // 운영에서 한줄 누락해도 됨.
//연관관계 편의 메서드
public void setMember(Member member){
this.member=member;
member.getOrders().add(this);
}
//연관편의메서드
public void addChildCategory(Category child){
this.child.add(child);
child.setParent(this);
}
'Java > Spring-app' 카테고리의 다른 글
회원 기능 테스트 (0) | 2023.06.07 |
---|---|
회원 서비스 개발 //의존관계주입, @Transactional(readOnly) (1) | 2023.06.06 |
회원 리포지토리 개발 (0) | 2023.06.06 |
엔티티 클래스 개발1 // JPA 어노테이션 (1) | 2023.06.06 |
JPA 실전편 환경설정 // 문제-해결 중심으로 복습 (0) | 2023.06.05 |