• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

v3에서 Order은 영속상태인가&트랜잭션

22.09.10 16:03 작성 조회수 185

0

  1. orderV3 메서드를 보면 orderRepository.findAllWithItem(); 은 List<Order>를 반환합니다. 이때 Order은 영속상태인가요?

  2. 1번과 연관된 질문입니다.

    만약 Order이 영속상태라면 트랜젝션은 어느시점에 열린건가요? orderV3 메서드나 OrderApiController 클래스 모두 @Transactional 이 보이지 않습니다. 만약 생략 되었다면 어느 경우에 @Transactional 이 생략되어도 트랜젝션이 열리는 것인지 궁금합니다.

2번 질문의 경우 JPA책의 578쪽을 보면 '스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다' 라 적혀 있는데 트랜잭션이 없다면 영속성 컨텍스트가 열릴 수 있는지 궁금했습니다.

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2022.09.10

안녕하세요. tksrleo123님, 공식 서포터즈 y2gcoder입니다.

1번에 대한 답변을 드리려면 OSIV에 대해 아셔야 합니다. 기본적으로 스프링은 OSIV가 켜져있고, OSIV가 켜져있으면 영속성 컨텍스트와 데이테베이스 커넥션이 API 응답이 끝날 때까지 살아있습니다. 즉 영속 상태이기 때문에 지연로딩 또한 가능합니다. OSIV를 끄면 아마 영속상태를 유지할 수 없을 것으로 보입니다.

2번은 orderRepository.findAllWithItem(); 메서드 실행할 때 트랜잭션이 열리게 됩니다. 더 정확히는 em.createQuery()를 하는 과정에서 DB와 통신을 하기 위해 열고 닫히게 됩니다. 이렇게 말씀드리면 트랜잭션의 개념이라는 게 무엇인지 모호할 수 있는데요, 이건 DB 1편을 보시면 그런 의문을 해소하실 수 있을 겁니다.


감사합니다.

tksrleo123님의 프로필

tksrleo123

질문자

2022.09.10

감사합니다.

 

DB 1편도 다음주 중으로 공부할 예정입니다.

혹시 일단 트랜잭션 없이는 영속성컨텍스트는 없다 라고 이해해도 될까요?

y2gcoder님의 프로필

y2gcoder

2022.09.10

기본적으로 영속성 컨텍스트는 트랜잭션 단위로 작동한다고 이해해주세요!

tksrleo123님의 프로필

tksrleo123

질문자

2022.09.10

네! 감사합니다