为什么我们需要在springdata中为更新函数添加注释@Transactional?

时间:2016-04-28 10:09:14

标签: spring-data spring-data-jpa

为什么我们需要在Springdata中添加注释@Transactional以获取更新功能,而我们不需要它来创建,删除,删除?

以下是一个例子。

@Service
public class PersonService
{
    @Autowired
    private PersonRepository personRepository;

    @Transactional
    public int updateEmail(String email,Integer id)
    {
        return personRepository.updateEmail(email, id);
    }

 }

1 个答案:

答案 0 :(得分:0)

来自官方docs

  

默认情况下,存储库实例上的CRUD方法是事务性的。对于读取操作,事务配置readOnly标志设置为true,所有其他配置使用普通@Transactional,以便应用默认事务配置。

因此,我们可以得出结论,默认情况下,数据操作的所有默认方法(例如deletedeleteAllsave等)都使用@Transactional。我们可以查看JpaRepository默认实施SimpleJpaRepository来确认。接下来就是当你编写自己的数据操作方法时(我可以看到你创建了一个更新Person类电子邮件的方法),默认情况下它们是@Transactional(readOnly = true),因此这些方法无论如何都不会影响现有数据。这就是为什么我们需要使用@Transactional注释来注释它们。