em.find() vs em.getReference()em.find() : 데이터베이스를 통해서 실제 entity 객체 조회em.getReference() : 데이터베이스 조회를 미루는 프록시 entity 객체 조회em.getReference() 호출 시점에는 쿼리를 보내지 않음.em.getReference() 불러온 값을 사용할 때 쿼리를 보냄. 객체 초기화 순서
특징
==을 보장해 줘야하기에 생기는 특징em.find() -> em.getReference()의 경우 실제 entity를 가져옴em.getReference() -> em.find()의 경우 프록시를 반환em.close(), em.detach() 상태일 때 초기화할 수 없음. em.find() -> entity 내부 entity를 사용 -> 해당 시점에 내부 entity를 초기화Team team = member.getTeam();
team.getName(); // 실제 team을 사용하는 시점에 초기화(DB 조회)em.find()에서 모두 초기화 fetch = FetchType.EAGER 로 사용 em.createQuery 사용시 fetch = FetchType.LAZY 사용cascade=CascadeType.TYPEALL: 모두 적용PERSIST: 영속REMOVE: 삭제MERGE: 병합REFRESH: REFRESH DETACH: DETACHorphanRemoval = true@OneToOne, @OneToMany만 가능 CascadeType.ALL + orphanRemoval=true