当前位置: 首页 > 面试题库 >

如何在Spring Data中使用@Transactional?

丁经略
2023-03-14
问题内容

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

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

有特定的原因为什么我应该/不应该使用@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)不是严格必需的,但是会触发事务基础结构中的一些优化(将设置为FlushModeMANUAL以使持久性提供程序在关闭时可能会跳过脏检查EntityManager)。除此之外,该标志还在JDBC连接上设置,这会导致对该级别的进一步优化。

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



 类似资料:
  • 问题背景 之前做springboot项目在操作数据库方面一直在使用的是Mybatis,最近在查阅资料的时候接触到了SpringData JPA与SpringData JDBC,想问一下大佬们,这三个框架如何选型

  • 我有一个新的SpringBoot应用程序来公开一些与jar中的实体相关的服务(作为一个依赖项包含在POM中)。对于数据访问,我计划使用SpringData,这样我就可以使用伟大的JpaRepository,而不是手动编写DAO。 jar在代码中是可见的,所以编译一切都很好,但是当Spring开始连接bean时,它会抛出异常: 在JAR中声明@Entity并使用SpringData/jpaEntit

  • 所以我在下面有以下的质疑: 上面的查询工作良好。但是,我想先按dealerType对结果排序,然后按dealerCode排序,有点像“Order by dealerType asc,dealerCode desc”。如何实例化OrderSpecifier,使结果按dealerType排序,然后按dealer代码排序。 DealerRepository dlrRpstry扩展了JPararePosi

  • 在任何情况下,我不想重复计数的每一个页面我需要,这个信息是需要的只是第一次调用。

  • 问题内容: 我接下来的两个实体之间具有OneToOne关系: 我正在尝试运行以下代码: 但是我得到这个错误: 我可以“解决”它,将代码更改为: 我的问题是,哪种方法可以持久保持OneToOne关系?在我的代码中,为什么要保存关系的两个部分以使其起作用? 问题答案: 再来一次。 每个双向关联都具有两个方面:所有者方面和相反方面。反面是具有属性的那一面。所有者方是另一方。JPA / Hibernate

  • 本文向大家介绍springData使用QueryDsl的示例代码,包括了springData使用QueryDsl的示例代码的使用技巧和注意事项,需要的朋友参考一下 经过多年,spring data jpa越来越完善,在版本迭代的过程中,会不断增加功能,今天看新的reference发现有Querydsl.然后搜索到上面的参考资料2 无论是JpaSpecificationExecutor,还是Quer

  • 问题内容: 是否可以使用Spring Data创建只读存储库? 我有一些链接到视图的实体,还有一些子实体,我想为其提供一个存储库,其中包含的某些方法,以及带有批注的某些方法。我想避免提供像和这样的方法,因为它们没有意义,并且可能会产生错误。 谢谢! 问题答案: 是的,方法是添加手工制作的基础存储库。您通常使用以下内容: 现在,您可以使刚刚定义的具体回购扩展: 定义基本存储库的关键部分是,方法声明

  • 我与MongoDB和Spring数据的聚合框架进行了相当长的一段时间的斗争,我实际上想知道我想做的事情是否真的可能。 null 我试图从这种方法开始,但我找不到如何在一个聚合pipeline中完成所有事情的方法: