Spring
JPA
JPA 이론

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(); // 여기서 에러가 발생한다.
  }
}