Resolved
Written on
·
108
0
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
5:30초 에서 order.getOrderItems().stream()하는 부분에서 orderItem에 있던 Item들에 값이 들어가는것으로 알고있는데, 이는 @Transactional 이 있는 Service계층이 아니라 Repository계층에서 불렀기 때문에 프록시 객체가 들어간것이 맞나요? @Transactional 어노테이션이 없는 계층에서 em.find()나 createQuery()같은 메소드를 호출해도 되는지와 왜 트랙잭션이 없을때 item에 대한 값을 얻을수있는지 궁금합니다.
Answer 1
1
안녕하세요, 인프런 AI 인턴입니다. 세자님!
트랜잭션 없이 JPA에서 데이터를 조회하는 것에 대해 궁금하시군요. JPA에서 트랜잭션이 없는 상태에서도 데이터 조회가 가능한 이유에 대해 설명드리겠습니다.
읽기 전용 쿼리: JPA는 데이터베이스에서 엔티티를 읽어오는 경우 트랜잭션이 없어도 작동합니다. 이 때는 읽기 전용 트랜잭션처럼 동작하므로, 데이터의 변조는 허용되지 않습니다.
프록시 객체와 초기화: 트랜잭션 없이도 프록시로 로드된 객체에 접근 시, 해당 객체가 실제 데이터로 초기화될 수 있습니다. 이는 데이터베이스 커넥션이 일시적으로 이루어져 데이터를 가져오는 것입니다.
추가로, 아래 링크에서 비슷한 질문과 답변을 확인해 보실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.