您实际上在问什么?
@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在该接口中可能已声明或重新装饰的操作方法上添加一个普通格式。



