Transaction의 영속성 범위
스프링의 트랜잭션은 해당 메서드가 시작되기 전에 시작되어서 해당 메서드가 끝날 때 트랜잭션을 커밋하면서 종료한다.
만약에 변경 감지를 위해서 지연로딩을 할 때 트랜잭션의 영속성 범위가 끝나있는 곳(Controller)에서 지연로딩을 하게 되면 에러가 발생한다.
Entity
public class Order {
@Id @GenratedValue
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
private Member member;
}
Order Controller
@RestController("...")
class OrderController {
public String view(Long orderId) {
Order order = orderService.findOne(orderId);
Member member = order.getMember();
member.getName(); // 여기서 에러가 발생한다.
}
}