Closed wishoon closed 2 years ago
instance of
Member.m1
Member.m2
em.getReference()
member.getXXX()
@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.EAGER)
JOIN
List<Member> members = em.createQuery("select m from Member m", Member.class) .getResultList();
FetchJoin
batchSize
@ManyToOne
@OneToOne
Lazy
@Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) private List<Child> childList = new ArrayList<>(); ... } Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); // 커밋 실행
orphanRemoval = true
즉, 참조하는 곳이 하나일 때 사용해야 하며, 특정 엔티티가 개인 소유할 때 사용
@OneToMany
CascadeType.ALL + orphanRemovel = true
프록시
프록시 기초
프록시 특징
instance of
사용)Member.m1
과Member.m2
는 같은 클래스 타입이기 때문에 == 비교 시 무조건 TrueMember.m1
이 프록시 객체일 경우가 있기 때문에 instance of 를 사용해 비교em.getReference()
를 호출해도 실제 엔티티 반환프록시 확인
member.getXXX()
를 통해 강제 호출 가능즉시 로딩과 지연 로딩
지연 로딩
@ManyToOne(fetch = FetchType.LAZY)
즉시 로딩
@ManyToOne(fetch = FetchType.EAGER)
JOIN
을 이용해서 한번에 데이터를 다 조회프록시와 즉시로딩 주의
FetchJoin
(1),batchSize
를 통해 해결(1 + 1)@ManyToOne
,@OneToOne
은 기본이 즉시 로딩 →Lazy
설정을 해주자!영속성 전이
영속성 전이 : CASCADE
고아 객체
orphanRemoval = true
즉, 참조하는 곳이 하나일 때 사용해야 하며, 특정 엔티티가 개인 소유할 때 사용
@OneToOne
,@OneToMany
에서 사용 가능영속성 전이 + 고아 객체, 생명주기
CascadeType.ALL + orphanRemovel = true