1

:방지에는 세션은 JPA의 환매 특약 방법을 전달하는 경우에 실패하지 않습니다 아래의 경우 JPA 저장소를 사용 <strong>없는 세션</strong>의 실패 방지 할 수있는 방법은 무엇

가 나는에 fetch = FetchType.LAZY와 관련 @OneToMany와 X라는 클래스를 가지고 class Y. Repostiory에서 전체 메서드를 만든 다음 Service 클래스로 전달한 다음 Controller로 전달합니다.

내가 (최대 절전 모드)에서 오류가 발생 Lazy fetchType을 통해 관련 x.getY()에 의해 클래스 X에서 객체 Y를 얻고 싶은 동안

있는 세션라고합니다.

이 오류가 발생하지 않도록하려면 어떻게해야합니까?

답변

1

@Transactional 메서드 내에서 x.getY() 호출을 동봉하거나 호출 계층 구조에서 트랜잭션 경계를 위로 이동시켜 호출을 포함시켜야합니다.

내가 서비스보다 높은 이동하지 않을 일반적으로

는 그래서 만약 당신이 예를 들어 컨트롤러에서 처음으로 속성은 다음 다른 가능한 옵션이 될 것이라고 액세스 에 : 열심히

  • 필요한 모든 종속성을 잠시 가져 세션은 여전히 ​​트랜잭션 컨텍스트
  • 전화 그들을 x.getY().size를 initialze하는 depenedent의 colletions에 size 방법의 내부
  • 사용 Hibernate.initialize(x.getY());을 (join fetch를) 열립니다.
내가 올바른 오전 경우는`Transactional` @,하지만 제발 말해 사용하는 경향이
+0

- 나는'수입 org.springframework.transaction.annotation.Transactional를 사용해야합니다;'? – bielas

+0

예. 추가 설정 (패키지 스캐닝과 트랜잭션 관리)을 사용해야한다는 것을 기억해야합니다. http://www.baeldung.com/transaction-configuration-with-jpa-and-spring을 확인하십시오. –

+0

스프링 부트를 사용하더라도? – bielas