W8D3(3) - JPA
프록시
객체그래프탐색을 통해 주문에서 회원을 찾아가거나 회원에서 주문을 차아가거나
객체그래프 탐색할때마다 데이터베이스와 통신을 계속해야함
이를 보완하고자 프록시 객체를 도입
실제객체가 멤버를가져오는 시점에 연관된 테이블이 엔티티가 되는것이 아니라 프록시 객체로 매핑시켜놓고 고 객체를 사용하는순간에 조회한다
@Slf4j
@SpringBootTest
public class ProxyTest {
@Autowired
EntityManagerFactory emf;
@BeforeEach
void setUp() {
EntityManager entityManager = emf.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
// 주문 엔티티
Order order = new Order();
order.setUuid(UUID.randomUUID().toString());
order.setMemo("부재시 전화주세요.");
order.setOrderDatetime(LocalDateTime.now());
order.setOrderStatus(OPENED);
entityManager.persist(order);
// 회원 엔티티
Member member = new Member();
member.setName("kanghonggu");
member.setNickName("guppy.kang");
member.setAge(33);
member.setAddress("서울시 동작구만 움직이면쏜다.");
member.setDescription("KDT 화이팅");
member.addOrder(order); // 연관관계 편의 메소드 사용
entityManager.persist(member);
transaction.commit();
}
@Test
void proxy() {
EntityManager entityManager = emf.createEntityManager();
// 회원 조회 -> 회원의 주문 까지 조회
Member findMember = entityManager.find(Member.class, 1L);
log.info("orders is loaded : {}", entityManager.getEntityManagerFactory()
.getPersistenceUnitUtil().isLoaded(findMember.getOrders())); //프록시객체인지 확인
log.info("-------");
log.info("{}" ,findMember.getOrders().get(0).getMemo());
log.info("orders is loaded : {}", entityManager.getEntityManagerFactory()
.getPersistenceUnitUtil().isLoaded(findMember.getOrders()));
}
}
Author And Source
이 문제에 관하여(W8D3(3) - JPA), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kcwthing1210/W8D33-JPA저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)