2014-10-30 1 views
7

Spring JDBC로 주석 기반 트랜잭션 관리를 사용하고 있습니다.트랜잭션에없는 경우 롤백 Spring JDBC 작업

실수로 @Transactional을 삽입/업데이트/삭제하는 서비스 메소드에 주석을다는 것을 잊었을 때 Spring에서 예외가 발생하도록하고 싶습니다.

기본적으로 데이터는 트랜잭션 내에서도 삽입/업데이트/삭제할 수 있습니다.

+1

DAO 계층에서 Propagation.MANDATORY를 사용할 수 있습니다. –

+0

트랜잭션이 항상 거기에서 시작되므로 서비스 계층에서만 @Transactional을 사용하도록 선택되었습니다. – yannisf

+0

리플렉션을 통해 모든 서비스 클래스를 반복 할 수 있으며, 모든 트랜잭션 클래스에 @ Transactional annotation –

답변

1

DAO 레이어에서 Propagation.MANDATORY을 사용할 수 있습니다.

Propagation.MANDATORY은 트랜잭션을 시작하지 않습니다. 컨테이너가 예외를 throw하지 않으면 perticular 메소드가 트랜잭션에 첨부되어 있는지 여부를 확인합니다.

0

문서에 따르면 (봄 문서) 그냥 '트랜잭션 인식'인 방법이나 인터페이스가 무언가에 의해 구성 할 수있는 표시를 제공하는 메타 데이터의 (로 즉

단지 TX : 주석 기반없이 @Transactional 속성은 당신이 적용되는 "기본"트랜잭션 특성 얻을 믿습니다.

전파 설정이 필요하다 격리 수준은 DEFAULT입니다 트랜잭션이 기본 트랜잭션의 기본 시간 제한/쓰기 트랜잭션 시간 제한 기본값을 읽습니다.. 체계, 타임 아웃이 지원되지 않으면 none이됩니다. ny RuntimeException은 롤백을 트리거하고 확인 된 예외는 트리거하지 않습니다. 당신이 텍사스를 사용하는 가정 : 주석을 트랜잭션 관리를 통해 그것을 운전 후 @Transactional 속성을 놓치게는 noRollbackFor 등 readOnly 인, 격리, 전파, rollbackFor, 같은 속성을 적용 할 수 없음을 의미

나는 MVC가 약간 다르다고 믿는다 - 최대 절전 모드 세션은 MVC 요청에 직접적으로 묶여있다. 즉, 요청이 수신되면 트랜잭션이 시작된다.

/** * 얻기 하이버 네이트 세션, 하나에서 :

protected final Session getSession() 
    throws DataAccessResourceFailureException, IllegalStateException 
{ 
    return getSession(this.hibernateTemplate.isAllowCreate()); 
} 

차례에 호출하는 다음과 같이 위로 예

는 HibernateDaoSupport를에 대해 getSession()에 대한 코드는 현재 거래 또는 * 새 거래. 후자는 "allowCreate"가 true 인 경우에만 허용됩니다. * ....... 궁극적으로 호출

protected final Session getSession() 
    throws DataAccessResourceFailureException, IllegalStateException { 
return getSession(this.hibernateTemplate.isAllowCreate()); 
} 

에 :

/** * ... 파라미터 : allowCreate 비 트랜잭션 세션이 을 생성해야하는지 여부 * 기본적으로

private static Session doGetSession(
    SessionFactory sessionFactory, Interceptor entityInterceptor, 
SQLExceptionTranslator jdbcExceptionTranslator, boolean allowCreate) 

*/

에는 트랜잭션 세션이 현재 스레드 찾을 수없는 * ... , 트랜잭션 : 1 AFA : 세션 1을 묶여 ik를 사용하고 트랜잭션없이 실행하는 유일한 방법은 JBoss에 'baked in'퍼시스턴스 계층을 사용하는 것입니다. getSession() 후에 getQuery()를 호출하더라도 여전히 JDBC/Hibernate 연결로 인해 트랜잭션이 효과적으로 발생합니다.