2017-12-14 1 views
2

간단한 예 : 나는 (내가 제대로 트랜잭션을 이해한다면) 실패 할 것으로 예상했을 때 어떤 방법이 @Transactional 주석되지 않았다 (나는 실제로 그것을 원하는만큼왜 @Transactional없이 저장할 수 있습니까?

@Entity 
public class Foo { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 
    private String bar; 

    // getters + setters 

} 

public interface FooRepository extends CrudRepository<Foo, Integer> { 
} 

@Service 
public class FooService { 

    private final FooRepository repository; 

    public FooService(FooRepository repository) { 
    this.repository = repository; 
    } 

    public Foo save(Foo foo) { 
    return repository.save(foo); 
    } 

} 

는, 컨트롤러 작품에서 fooService.save(myNewFoo)를 호출 실패). 왜이 행동을하는 걸까요? 누가 장면을 통해 트랜잭션을 생성하고이를 피하는가?

추가 세부 정보 :

  • 자바 9
  • MySQL의 커넥터 6.0.6
  • 최대 절전 모드 5.2.12
  • 봄 부팅 2.0.0.M7
  • 스프링 데이터 JPA 2.0.2. RELEASE
+0

기본적으로 'CrudRepository' 및 친구들의 메소드는'@ Transactional'입니다. –

+0

@ M.Deinum 그런데'@ Transactional'이 아니라면 어떻게해야합니까? 전체 구현을 직접 다시 작성하는 것 외에도? 내 서비스가 거래를 담당하게하고 그렇지 않으면 실패합니다. – sp00m

+0

@ M.Deinum 어쩌면'SimpleJpaRepository'를 확장하고 어떤 식 으로든'@ Transaction's를 비활성화 할 수 있습니까? – sp00m

답변

0

Spring에서 제공하는 CrudRepository#save의 구현 기본적으로 트랜잭션을 만듭니다. 자세한 내용은 the documentation을 참조하십시오.

관련 문제