2016-09-15 97 views
3

我会使用Spring-Boot,Spring Rest Controller和Spring Data JPA。如果我没有指定@Transaction,那么也记录得到的创建,但我想了解它是如何发生的。我的理解是,默认情况下,Spring添加一个事务与默认参数,但不知道它添加的地方是它添加服务层或在存储库。春季交易:如果我不给@Transaction注释方法

public interface CustomerRepository extends CrudRepository<Customer, Long> { 

    List<Customer> findByLastName(String lastName); 
} 

@Service 
public class CustomerServiceImpl implements CustomerService> { 

    List<Customer> findByLastName(String lastName){ 
    //read operation 
    } 

// What will happen if @Transaction is missing. How record get's created without the annotation 
    public Customer insert(Customer customer){ 
    // insert operations 
    } 
} 
+0

投票,因为我有同样的问题,需要很长时间才能找到答案。 –

回答

0

弹簧数据JPA添加在特别是在类SimpleJpaRepository.This存储库层@Transactional注释被其延长所有的Spring数据JPA储存库中的存储库基类

例如

/* 
    * (non-Javadoc) 
    * @see org.springframework.data.repository.CrudRepository#save(java.lang.Object) 
    */ 
    @Transactional 
    public <S extends T> S save(S entity) { 

     if (entityInformation.isNew(entity)) { 
      em.persist(entity); 
      return entity; 
     } else { 
      return em.merge(entity); 
     } 
    } 
0

尽管Spring在DAO层自动添加@Transactional注释,但它不是正确的位置,也不是正确的行为。注释必须位于服务层,有回答的问题here