如何在Spring Data中使用@Transactional?

我刚刚开始从事Spring数据,Hibernate,MySQL,JPA项目。我切换到spring-data,这样我就不必担心手动创建查询。

我注意到@Transactional当你使用spring-data时不需要使用,因为我也尝试了不带注释的查询。

有特定的原因为什么我应该/不应该使用@Transactional注释?

作品:

@Transactional

public List listStudentsBySchool(long id) {

return repository.findByClasses_School_Id(id);

}

也可以:

public List listStudentsBySchool(long id) {

return repository.findByClasses_School_Id(id);

}

提前致谢!

回答:

你实际上在问什么?@Repository注释或的用法@Transactional

@Repository根本不需要,因为你声明的接口将由Spring Data基础结构创建并激活异常转换的代理支持。因此,在Spring Data仓库接口上使用此批注根本没有任何作用。

@Transactional-对于JPA模块,我们在支持代理(SimpleJpaRepository)的实现类上具有此批注。这有两个原因:首先,持久化和删除对象需要JPA中的事务。因此,我们需要确保事务正在运行,方法是使用注释方法@Transactional

findAll()findOne(…)这样使用的读取方法@Transactional(readOnly = true)并非绝对必要,但会触发事务基础结构中的一些优化(将设置为FlushMode,MANUAL以使持久性提供程序在关闭时可能会跳过脏检查EntityManager)。除此之外,该标志还在JDBC连接上设置,这会导致对该级别的进一步优化。

根据你使用的数据库的不同,它可能会忽略表锁,甚至拒绝你可能意外触发的写操作。因此,我们建议也使用@Transactional(readOnly = true)for查询方法,你可以轻松地实现将该注释添加到存储库接口。确保@Transactional在该接口中可能已声明或重新装饰的操作方法上添加一个普通格式。

以上是 如何在Spring Data中使用@Transactional? 的全部内容, 来源链接: utcz.com/qa/405547.html

回到顶部