private static void logic(Member m1, Member m2){
System.out.println("m1 == m2 : " + (m1 instanceof Member));
System.out.println("m1 == m2 : " + (m2 instanceof Member));
}
Member m1 = em.find(Member.class, m1.getId());
System.out.println("m1 = " + m1.getClass());
Member reference = em.getReference(Member.class, reference.getId());
System.out.println("reference = " + reference.getClass());
System.out.println("a == a " + (m1 == reference)); // true
Member refMember = em.getReference(Member.class, refMember.getId());
System.out.println("refMember = " + refMember.getClass());
Member findMember = em.find(Member.class, findMember.getId());
System.out.println("findMember = " + findMember.getClass());
System.out.println("a == a " + (m1 == reference)); // true
✏️ 둘 다 Member 객체를 반환, 한 트랜잭션 안에서 항상 true를 반환한다.
✏️ 그렇기 때문에 프록시로 먼저 조회하면 프록시 객체를 반환하고 select 쿼리문이 나가고 findMember를 해도 항상 true를 만들어주기 위해 프록시 객체를 반환시켜준다.
Member member = em.getReference(Member.class, "id1");
member.getName();
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
emf.getPersistenceUnitUtil().isLoaded(프록시객체); // 초기화 여부 확인
프록시객체.getClass(); // 클래스 확인
프록시객체.getUsername(); // 강제 초기화
Hibernate.initailize(프록시객체) // 강제 초기화
정보가 풍부해서 많은 도움이 되었습니다.