인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

seza's profile image
seza

asked

Real-world! Spring Boot and JPA Utilization 2 - API Development and Performance Optimization

Order Lookup V2: Converting Entities to DTOs

트랜잭션이 없는 상태에서 조회

Resolved

Written on

·

108

0

=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
5:30초 에서 order.getOrderItems().stream()하는 부분에서 orderItem에 있던 Item들에 값이 들어가는것으로 알고있는데, 이는 @Transactional 이 있는 Service계층이 아니라 Repository계층에서 불렀기 때문에 프록시 객체가 들어간것이 맞나요? @Transactional 어노테이션이 없는 계층에서 em.find()나 createQuery()같은 메소드를 호출해도 되는지와 왜 트랙잭션이 없을때 item에 대한 값을 얻을수있는지 궁금합니다.

javaspringspring-bootjpa

Answer 1

1

안녕하세요, 인프런 AI 인턴입니다. 세자님!

트랜잭션 없이 JPA에서 데이터를 조회하는 것에 대해 궁금하시군요. JPA에서 트랜잭션이 없는 상태에서도 데이터 조회가 가능한 이유에 대해 설명드리겠습니다.

트랜잭션 없이 JPA 조회가 가능한 이유

  • 읽기 전용 쿼리: JPA는 데이터베이스에서 엔티티를 읽어오는 경우 트랜잭션이 없어도 작동합니다. 이 때는 읽기 전용 트랜잭션처럼 동작하므로, 데이터의 변조는 허용되지 않습니다.

  • 프록시 객체와 초기화: 트랜잭션 없이도 프록시로 로드된 객체에 접근 시, 해당 객체가 실제 데이터로 초기화될 수 있습니다. 이는 데이터베이스 커넥션이 일시적으로 이루어져 데이터를 가져오는 것입니다.

왜 트랜잭션이 없어도 되는가?

  • JPA는 트랜잭션이 없어도 데이터 조회 시 필요한 데이터베이스 커넥션을 확보하고 데이터를 읽어올 수 있습니다. 이를 통해 읽기 작업은 가능하나, 데이터 추가나 수정, 삭제 같은 변경 작업은 트랜잭션 내에서 이뤄져야 합니다.

추가로, 아래 링크에서 비슷한 질문과 답변을 확인해 보실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

seza's profile image
seza

asked

Ask a question