2013-05-09 2 views
1

내 서비스 레이어에 @Transactional 개의 주석을 사용하고있었습니다. 그러나보기에서 지연로드로 인한 오류를 해결하려면 Open Session in View Filter을 사용해야했습니다. 그 후에 @Transaction 자체를 사용하지 않고 Session이 열리고 트랜잭션이 시작됩니다. 그렇다면 @ 트랜잭션이 필요하지 않다는 의미입니까? 트랜잭션 및 롤백은 어떻게 처리되고, 서비스 계층에서는 처리됩니까?열린 세션보기에서 @ 트랜 슬 레이션

답변

3

The javadoc는 설명 :

이 필터는 트랜잭션 관리자에 의해 자동 감지 될 현재의 thread를 통해 최대 절전 모드 세션을 사용할 수 있습니다. HibernateTransactionManager 또는 JtaTransactionManager를 통한 서비스 계층 트랜잭션은 물론 비 트랜잭션 실행 (적절하게 구성된 경우)에 적합합니다.

참고 :이 필터는 기본적으로 FlushMode.NEVER로 설정된 플래시 모드로 Hibernate 세션을 플러시하지 않습니다. 이는 플러시를 관리하는 서비스 계층 트랜잭션과 함께 사용되는 것으로 가정합니다. 활성 트랜잭션 관리자는 읽기/쓰기 트랜잭션 중에 일시적으로 플러시 모드를 FlushMode.AUTO로 변경하고 플러시 모드를 FlushMode.NEVER로 끝까지 리셋합니다 각 거래의 트랜잭션없이이 필터를 사용하려면 "flushMode"속성을 통해 기본 플러시 모드를 변경하십시오.

+0

이해할 수 없습니다. 서비스 레이어에서 @Transactional을 사용해서는 안된다는 뜻입니다. 더 나은 방법으로 설명 할 수 있습니까 아니면 일부 링크 –

+3

아니 수 있습니다. 즉 평소와 같이 @Transactional을 사용하여 평소처럼 서비스 레이어를 코딩해야합니다. 차이점은 트랜잭션이 커밋 된 후에도 세션이 계속 열려 있다는 것입니다. –