[SPRING] Spring @ 트랜잭션 방식 - 참여 트랜잭션
SPRINGSpring @ 트랜잭션 방식 - 참여 트랜잭션
한 DAO에는 2 가지 트랜잭션 방법이 있습니다.
내가 명시적인 속성을 제공하지 않으면,
그러면 어떻게 될까요?
나는 다른 방법으로 하나의 방법을 실행합니까?
두 방법 모두 동일한 하나의 트랜잭션 내에서 실행됩니까?
해결법
-
==============================
1.Transactional을 사용할 때 클래스의 프록시를 다루므로이 시나리오에서 다음을 수행하십시오.
Transactional을 사용할 때 클래스의 프록시를 다루므로이 시나리오에서 다음을 수행하십시오.
@Transactional public void doSomeThing(){ // calling this method targets a proxy doSomeThingElse(); // this method targets the actual class, not the PROXY, // so the transactional annotation has no effect } @Transactional public void doSomeThingElse(){ }
외부로부터 프록시를 호출하고 있지만 두 번째 메소드 호출은 프록시 된 객체 내부에서 이루어 지므로 트랜잭션 지원이 없습니다. 당연히 두 번째 메소드에서 @Transactional 어노테이션의 값이 무엇이든 관계없이 같은 트랜잭션에서 실행됩니다.
별도의 거래가 필요한 경우에는
yourservice.doSomething(); yourservice.doSomethingElse();
밖에서.
전체 시나리오는 Spring AOP> "솔루션"을 포함한 AOP 프록시 이해하기 장에서 잘 설명된다.
public class SimplePojo implements Pojo { public void foo() { // this works, but... gah! ((Pojo) AopContext.currentProxy()).bar(); } public void bar() { // some logic... } }
-
==============================
2.@Transactional의 전달 속성의 기본값은 REQUIRED이며 이는 다음을 의미합니다.
@Transactional의 전달 속성의 기본값은 REQUIRED이며 이는 다음을 의미합니다.
그래서 예 - 두 가지 방법 모두 동일한 트랜잭션에서 실행됩니다.
그러나 중요한 조언 하나 : DAO를 트랜잭션 화하지 마십시오. 서비스는 DAO가 아니라 트랜잭션이어야합니다.
-
==============================
3.스프링 박사
스프링 박사
하나의 메모 :
from https://stackoverflow.com/questions/2865055/spring-transactional-method-participating-transaction by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] DispatcherServlet에 따라 ContextLoaderListener 사용 (0) | 2019.01.21 |
---|---|
[SPRING] Spring webSecurity.ignoring ()은 사용자 정의 필터를 무시하지 않습니다. (0) | 2019.01.21 |
[SPRING] 봄 콩에 EJB 3 주입 (0) | 2019.01.21 |
[SPRING] <form : select>에서 데이터를 전달하는 방법 Spring MVC (0) | 2019.01.21 |
[SPRING] @NamedQuery가 Spring 데이터 나머지에서 findAll을 오버라이드합니다. JpaRepository (0) | 2019.01.21 |