프록시,연관관계 관리하기
프록시와 즉시로딩 주의
-
프록시 객체 -->지연로딩
-
가급적 지연 로딩만 사용
--> 연관된 객체가 많을 경우에 즉시로딩을 사용하면 효율이 많이 떨어진다. -
즉시 로딩은 JPQL에서 N+1 문제를 일으킨다.
--> N개의 Member가 Team을 갖고 있을 시 N개의 team조회 쿼리 발생 -
@ManyToOne , @OneToOne은 기본이 즉시 로딩 --> LAZT로 바꿔야함
(속성fetch)
영속성 전이:CASCADE
특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함꼐 영속 상태로 만들고 싶을 때 사용한다.
ALL :영속, 삭제 모두 적용
persist : 영속만 적용
// @OneToMany(mappedBy = "parent",cascade = CascadeType.PERSIST,orphanRemoval = true)
// private List<Child> childList = new ArrayList<>();
Parent parent = new Parent();
Child child1 =new Child();
Child child2=new Child();
parent.addChild(child1);
parent.addChild(child2);
em.persist(parent);
em.flush();
em.clear();
Parent findParent = em.find(Parent.class, parent.getId());
findParent.getChildList().remove(0);
- 주의할 점: 연관관계를 매핑하는 것과 아무 관련이 없음
고아 객체
- 고아 객체 제거: 부모 엔티티와 연관관계가 끈허진 자식 엔티티를 자동으로 삭제
orphanRemoval = true
//// @OneToMany(mappedBy = "parent",cascade = CascadeType.PERSIST,orphanRemoval = true)
Parent parent1 = em.find(Parent.class, id);
parent1.getChildren().remove(0);
- 주의
: 참조하는 곳이 하나일 때 사용해야한다.
: @OneToOne, @OneToMany만 가능
영속성 전이 + 고아 객체, 생명주기
- 두 옵션을 모두 활성화 하면 부모 엔티티를 통해서 자식의 생명 주기를 관리할 수 있음
- 도메인 주도 설계의 Aggregate Root 개념을 구현할 때 유용하다.
Author And Source
이 문제에 관하여(프록시,연관관계 관리하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yuus95/프록시연관관계-관리하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)