저는 현재 Hibernate와 함께 Spring Boot와 Spring Data (정확하게는 JpaRepository
인터페이스)를 사용하는 응용 프로그램을 작성 중입니다.봄 부팅 및 봄 데이터 : 최대 절전 세션은 어떻게 관리됩니까?
내가 Hiberante에 대해 좋아하는 한 가지 특징은 캐싱 기능입니다. 특정 개체와 일치하는 쿼리를 여러 개 제출하면 모든 쿼리 실행 (Java의 == 연산자와 관련하여)에서 해당 개체의 동일한 인스턴스가 반환됩니다. 그러나 스프링 데이터와 JpaRepository
클래스를 사용할 때 항상 그런 것은 아닙니다. 그런 이유로 여기에 여러 개의 HibernateSession
인스턴스가 있다고 가정합니다.
내 질문에 대한 답변 : Spring 데이터는 Hibernate 세션을 어떻게 처리합니까? 언제 열거 나 닫을까요? Hibernate의 객체 캐시를 최대한 활용하기 위해 애플리케이션의 전체 런타임에 대해 동일한 세션을 사용하도록 구성하는 방법이 있습니까? 그 이유가 이 아니고이 아니겠습니까?
감사합니다,
앨런
사실 사실이 아닙니다 ... 거래 경계 설정에 따라 이미 열려있는 세션을 다시 사용하게됩니다. '@ Transactional' 주석이 붙은 서비스 메쏘드가 있다면 (그리고 tx 지원을 제대로 설정했다면) Spring은'Session' /'EntityManager'를 열고 트랜잭션 내에서 수행하는 모든 db 호출을 위해 그것을 재사용 할 것입니다. 또한 서비스 계층은 데이터 액세스 계층이 아닌 트랜잭션 계층이어야합니다. –
설명해 주셔서 감사합니다. 이것은 잘 알고 있습니다. – Alan47