//컨트롤러에서 리포지토리를 직접 접근class OrderController{ @Autowired OrderService orderService; @Autowired OrderRepository orderRepository; public String orderRequest(Order order, Model model){ long id = orderservice.order(order); //상품 구매 //리포지토리 직접 접근 Order orderResult = orderRepository.findOne(id); model.addAttribute("order", orderResult); ... }}@Transactionalclass OrderService{ @Autowired OrderRepository orderRepository; public Long order(order){ //비즈니스 로직 return orderRepository.save(order); }}class OrderRepository{ @PersistenceContext EntityManager em; public Order findOne(Long id){ return em.find(Order.class, id); }}
OSIV를 사용하기 전에는 프리젠테이션 계층에서 사용할 지연 로딩된 엔티티를 미리 초기화해야 했다. 그리고 초기화는 영속성 컨텍스트가 살아있는 서비스 계층이나 FACADE 계층이 담당했다.
하지만 OSIV를 사용하면 영속성 컨텍스트가 프리젠테이션 계층까지 살아있으므로 미리 초기화할 필요가 없다.
따라서 단순한 엔티티 조회는 컨트롤러에서 리포지토리를 직접 호출해도 아무런 문제가 없다.

OSIV 리포지토리 직접 호출