我正在阅读使用Spring框架的事务管理。在第一个组合中,我使用Spring Hibernate和Hibernate的API来控制事务(Hibernate API)。接下来,我想使用@Transactional
注释进行测试,它确实起了作用。
我感到困惑的是:
>
JPA、JTA、Hibernate是否有自己的事务管理方式。举个例子,考虑如果我使用Spring Hibernate,在那种情况下,你会使用“JPA”事务吗?
就像我们有JTA一样,说我们可以使用Spring和JTA来控制事务是真的吗?
@Transactional
注释是专门针对Spring框架的吗?据我所知,此注释是特定于Spring框架的。如果这是正确的,@Transactional
是否使用JPA/JTA进行事务控制?
我确实在网上阅读来澄清我的疑问,但是有些事情我没有得到直接的答案。任何投入都会大有帮助。
@Transactional
in case ofSpring-
@Transactional
注释应该放在所有不可分割的操作周围。
让我们举个例子:
我们有两种型号,即
国家
和城市
。国家/地区和城市的关系映射就像一个国家可以有多个城市,所以映射是这样的,
@OneToMany(fetch = FetchType.LAZY, mappedBy="country")
private Set<City> cities;
在这里,国家映射到多个城市,懒洋洋地获取它们。当我们从数据库中检索国家对象时,我们将获得国家对象的所有数据,但不会获得城市集,因为我们正在获取城市懒惰。
//Without @Transactional
public Country getCountry(){
Country country = countryRepository.getCountry();
//After getting Country Object connection between countryRepository and database is Closed
}
当我们希望从country对象访问城市集时,我们将在该集中获取空值,因为仅创建该集的集合对象未使用这些数据初始化,以获取我们使用的集合值
@Transactional
,即。,
//with @Transactional
@Transactional
public Country getCountry(){
Country country = countryRepository.getCountry();
//below when we initialize cities using object country so that directly communicate with database and retrieve all cities from database this happens just because of @Transactinal
Object object = country.getCities().size();
}
所以基本上
@Transactional
是服务可以在单个事务中进行多次调用,而无需关闭与终端的连接。
希望这对你有帮助。
问题内容: 我正在阅读使用Spring框架进行的事务管理。在第一个组合中,我使用了Spring + hiberante,并使用了Hibernate的API来控制事务(Hibenate API)。接下来,我想使用注释进行测试,它确实起作用。 我对此感到困惑: JPA,JTA,Hibernate是否具有它们自己的事务管理方式。例如,考虑如果我使用Spring + Hibernate,在那种情况下您会使
在我们的一个项目中,我们遇到了一个问题,Spring忽略了事务注释,然后失败了,出现了以下错误。 启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2018-09-13 15:05:18406错误[主]组织。springframework。靴子SpringApplication应用程序运行失败组织。springframework。道。Inva
问题内容: 关于Spring JPA存储库事务性的1个快速问题。我有未标记为事务性的服务,并调用了Spring JPA存储库方法 它被定义为 问题是它失败,并且“ 没有EntityManager,当前线程没有可用的实际事务- 无法可靠地处理’remove’调用;嵌套异常是javax.persistence.TransactionRequiredException “异常。 好的,我可以通过将服务
关于Spring JPA存储库事务性的1个快速问题。我有一个未标记为事务性的服务,并调用Spring JPA存储库方法 好的,我可以通过标记服务或deleteByEmail(..)来解决它方法作为事务性的,但我就是不明白为什么它现在会崩溃。Spring文档明确指出“存储库实例上的CRUD方法在默认情况下是事务性的。”(http://docs.spring.io/spring-data/jpa/do
根据java docs for@Lock Annotation: 用于指定执行查询时要使用的LockModeType的注释。在查询方法上使用Query或从方法名称派生查询时,将评估它。 如上所述,将使用@Query annotation或findBySomething对其进行评估。。()方法。 但根据我的发现,当我在任何方法中使用@Transactional放置@Lock注释,并在该事务方法中从d
试图收集和理解@事务性注释的要点并越过了一点。因此,在使用事务性注释时,我们需要记住的主要事情是: 事务注释只能应用于公共方法[根据Spring@Transactional属性对私有方法起作用吗? 事务性注释应该应用于具体的类,而不是接口[根据我应该将@transactional annotation放在接口定义还是实现类的位置? 事务注释应应用于服务级别[根据Spring@Transaction