为什么我们需要在Springdata中添加注释@Transactional以获取更新功能,而我们不需要它来创建,删除,删除?
以下是一个例子。
@Service
public class PersonService
{
@Autowired
private PersonRepository personRepository;
@Transactional
public int updateEmail(String email,Integer id)
{
return personRepository.updateEmail(email, id);
}
}
答案 0 :(得分:0)
来自官方docs:
默认情况下,存储库实例上的CRUD方法是事务性的。对于读取操作,事务配置readOnly标志设置为true,所有其他配置使用普通@Transactional,以便应用默认事务配置。
因此,我们可以得出结论,默认情况下,数据操作的所有默认方法(例如delete
,deleteAll
,save
等)都使用@Transactional
。我们可以查看JpaRepository
默认实施SimpleJpaRepository
来确认。接下来就是当你编写自己的数据操作方法时(我可以看到你创建了一个更新Person类电子邮件的方法),默认情况下它们是@Transactional(readOnly = true)
,因此这些方法无论如何都不会影响现有数据。这就是为什么我们需要使用@Transactional
注释来注释它们。