em.find()
: 데이터베이스를 통해서 실제 엔티티 객체 조회 - 쿼리 Oem.getReference()
: 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 - 쿼리 X프록시 특징
초기화: Member member = em.getReference(Member.class, "id1");
프록시 확인
PersistenceUnitUtil.isLoaded(Object entity)
entity.getClass().getName()
org.hibernate.Hibernate.initialize(entity)
@ManyToOne(fetch = FetchType.LAZY)
객체를 가져올 때가 아닌 객체를 사용하는 시점에 초기화(쿼리)@ManyToOne(fetch = FetchType.EAGER)
프록시와 즉시 로딩 주의
실무에서는 모든 연관관계에 지연 로딩 사용, 즉시 로딩 사용 X
특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로
@OneToMAny(mappedBy="parent", cascade=CascadeTypePERSIST)
주의: 영속성 전이는 연관관계 매핑과 관련 X, 단지 편리함 제공
CASCADE의 종류
고아 객체 제거: 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제
orphanRemoval = true
주의: 참조하는 곳이 하나일 때 사용! 특정 엔티티가 개인 소유할 때 사용
고아 객체 제거 활성화 시 부모를 제거할 때 자식도 함께 제거됨(=CascadeType.REMOVE)
CascadeType.ALL + orphanRemoval=true
두 옵션을 모두 활성화 하면 부모 엔티티를 통해서 자식의 생명 주기를 관리할 수 있음