나는 Hibernate의 디폴트 traversable resolver를 사용하여 엔티티의리스트를 검증 할 때 데이터베이스에 많은 호출을 할 수있는 메소드를 가지고있다. @Transactional에 주석을 달면 거의 4 배 더 빠르게 실행됩니다. 몇 가지 질문 :왜 Spring의 @Transactional Help 성능이 좋은가
1) 왜 더 빠릅니까?
2) 메소드를 트랜잭션 화하지 않고도이 속도 증가를 어떻게 복제 할 수 있습니까? 트랜잭션에서이 메서드를 래핑 할 필요가 전혀 없으며 트랜잭션 화하는 것이 메서드의 실제 의도와 다릅니다.
어쩌면 트랜잭션 변경 DB 쓰기 횟수를 줄일 수 있습니까? 찾으려는 기본 SQL 명령에 대한 디버그 로깅을 설정할 수 있습니다. – Kevin
이것은 읽기 전용 상태입니다. 내가 Hibernate의 Traversable Resolver가 인스턴스화되는 횟수를 줄이는 것처럼 보이지는 않지만 각각의 인스턴스 사이의 시간을 줄인다 고 말할 수있다. – Derek
나는 이것이 최대 절전 모드 세션과 관련이 있다고 믿는다. 매우 비싼 물체이기 때문에 모든 호출에 대해서 만들어진 모드가 하나만 있는지 확인해야한다. '@ Transactional'은 항상 그렇습니다. OpenSessionInView 필터를 사용하면 다른 방법으로 수동으로 할 수 있습니다. 또한'@ Transactional'을 피할 이유가 없습니다. – mrembisz