2013-05-03 2 views
0

메소드에 @Transactional (readOnly = true) 주석이있는 경우 내부 메소드가 쓰기를 허용하는 방법이 있습니까?Spring - @Transactional (readOnly = true) 메소드가 호출하는 내부 메소드

예 :

Class A { 
    @Transactional(readOnly = true) 
    public void readFoo(){ 
     b.writeFoo(); 
    } 
} 

Class B { 
    public void writeFoo(){} 
} 

나는 그것이 종류의 읽기 전용 주석이있는의 목적을 패배 알고 있지만 난 그냥 방법이 있는지 알고 싶습니다.

답변

0

@Transactional(propagation = Propagation.REQUIRES_NEW) 나를 위해 일했습니다. 주의해야 할 점은 메서드가 최대 절전 모드 개체를 사용하면 작동하지 않는다는 것입니다. 이 옵션은 최대 절전 모드 개체를 검색하고 Propagation.REQUIRES_NEW 메서드 내에서 변경하는 경우에만 작동합니다.

0

readOnly 속성은 @Transaction입니다. 주석은 트랜잭션 관리자에게 힌트 일뿐입니다. 트랜잭션을 관리하는 데 사용하는 기본 기술에 따라 다릅니다. 트랜잭션 읽기 전용 성능 (Hibernate)을 최적화하거나 단순히 readOnly 특성을 무시할 수 있습니다.

난 당신이

@Transactional(readOnly = false, propagation = Propagation.NESTED) 

같은 writeFoo() 즉 주석을 경우 읽기 전용 트랜잭션 부모에 독립적으로 행동하고 문제없이 쓸 수 있다고 생각합니다. 그러나 나는 이것을 직접 시험하지 않았다.