Byr*_*ach 68 java spring jpa spring-data spring-data-jpa
我刚刚开始研究Spring-data,Hibernate,MySQL,JPA项目.我切换到spring-data,这样我就不用担心手工创建查询了.
我注意到@Transactional当你使用spring-data时不需要使用,因为我也在没有注释的情况下尝试了我的查询.
我应该/不应该使用@Transactional注释的具体原因是什么?
作品:
@Transactional
public List listStudentsBySchool(long id) {
return repository.findByClasses_School_Id(id);
}
Run Code Online (Sandbox Code Playgroud)
还有效:
public List listStudentsBySchool(long id) {
return repository.findByClasses_School_Id(id);
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
Oli*_*ohm 118
你的问题实际上是什么?@Repository注释的用法或@Transactional.
@Repository完全不需要,因为您声明的接口将由代理支持,Spring Data基础架构无论如何都会创建并激活异常转换.因此,在Spring Data存储库接口上使用此注释根本没有任何效果.
@Transactional- 对于JPA模块,我们在支持proxy(SimpleJpaRepository)的实现类上有这个注释.这有两个原因:首先,持久化和删除对象需要JPA中的事务.因此,我们需要确保一个事务正在运行,我们通过使用该方法进行注释来完成@Transactional.
阅读类似的方法findAll(),并findOne(…)利用@Transactional(readOnly = true)这不是严格必要的,但触发了交易基础设施的几个优化(设置FlushMode来MANUAL让收盘时,持久性提供可能跳过脏检查EntityManager).除此之外,该标志也在JDBC连接上设置,这导致该级别的进一步优化.
根据您使用的数据库,它可以省略表锁,甚至拒绝您可能意外触发的写操作.因此,我们建议您使用@Transactional(readOnly = true)查询方法,您可以轻松地将该注释添加到存储库接口.确保@Transactional在您可能已在该界面中声明或重新装饰的操作方法中添加一个plain .
| 归档时间: |
|
| 查看次数: |
73270 次 |
| 最近记录: |