강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của handsomekey11230952
handsomekey11230952

câu hỏi đã được viết

Phát triển ứng dụng web dựa trên Spring và JPA

Cập nhật hồ sơ

영속 상태에 관해 질문이 있습니다.

Viết

·

258

2

저는 엔티티가 detached 되는 시점이 Transaction이 끝나는 시점 (@Transactional 애노테이션이 붙은 메서드의 호출 후)인 줄 알았는데 오늘 수업을 들으니 그게 아닌 것 같아요.

findByEmail로 조회를 하고나면 해당 트랜잭션이 끝나 detached 상태가 되는 줄 알았거든요.

그렇다면 제가 위에 서술한 부분 중 틀린 부분이 있을건데 어느 부분을 잘못 이해하고 있는지 궁금해요 !

spring-bootjavaJPAthymeleafspring

Câu trả lời 2

2

Key Handsome님의 프로필 이미지
Key Handsome
Người đặt câu hỏi

아.. 트랜잭션이 끝나도 영속성 관리는 유지되는 상태였기 때문이군요. 전 시간에 배운 걸 다시 물어본 셈이 되었네요. 감사합니다 ㅠ

2

whiteship님의 프로필 이미지
whiteship
Người chia sẻ kiến thức

"Transaction이 끝나는 시점"이 맞기도 하고 틀리기도 한데 OSIV 필터 때문에 영속성 관리자는 계속 열려 있어서 트랜잭션이 끝났어도 detached가 아니라 persist 상태일 수 있습니다.

OSIV 필터 때문에 영속성 관리자는 요청이 컨트롤러에 들어오기 전부터 만들어져 있고, 컨트롤러 안에서 리파지토리 사용해서 findByEmail로 엔티티를 조회할 때 당연히 리파지토리에 있는 @Transactional이 적용되서 엔티티 가져올 때 해당 엔티티는 persist 상태입니다. 그런데 영송성 관리자가 계속 현재 쓰레드에 열려 있기 때문에 컨트롤러가 @Transactional이 아니어도 해당 엔티티는 계속해서 persist 상태인 겁니다.

OSIV 필터가 없는 상태에서는 트랜잭션이 끝나는 시점이 영속성 관리자도 종료되는 시점이라고 가정하는게 맞긴합니다.

Hình ảnh hồ sơ của handsomekey11230952
handsomekey11230952

câu hỏi đã được viết

Đặt câu hỏi