em.getReference() : DB 쿼리가 안나가는데 객체가 조회가 되는 것.em.find()는 DB를 조회해서 실제 entity 객체를 조회하는 반면, hibernate가 내부의 라이브러리를 이용해 가짜 엔티티객체 (프록시)를 줌==대신 instanceof사용 @Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "username")
private String name;
@ManyToOne(fetch = FetchType.Lazy)
@JoinColumn(name = "team_id")
private Team team;
}
Member member = em.find(Member.class, 1L);
//member.team은 프록시임
Team team = member.getTeam();
team.getName(); //실제 team을 사용하는 시점에 초기화; DB조회
ManyToOne``OneToOne은 기본이 즉시로딩이므로 Lazy로 설정해야 함.WHEN AND WHY? 특정 entity를 persist할 때 연관된 entity도 함께 persist하고 싶을 때
특히, 어떤 entity가 단일 Entity에 완전히 종속적일 때; 다른 entity와 연관관계가 없을 경우
부모 Entity와 association이 끊어진 자식 entity를 자동으로 삭제
orphanRemoval = true
CascadeType.ALL, orphanRemoval=trueem.persist() 후 em.remove()로 제거한다.