JPA / JTA / @Transactional Spring批注

我正在阅读使用Spring框架进行的事务管理。在第一个组合中,我使用了Spring + hiberante,并使用了Hibernate的API来控制事务(Hibenate API)。接下来,我想使用@Transactional注释进行测试,它确实起作用。

我对此感到困惑:

  1. JPA,JTA,Hibernate是否具有它们自己的事务管理方式。例如,考虑如果我使用Spring + Hibernate,在那种情况下您会使用“ JPA”事务吗?

就像我们拥有JTA一样,是真的可以使用Spring和JTA来控制事务吗?

  1. @Transactional注释,是专门针对Spring框架?据我了解,该注释是特定于Spring Framework的。如果正确,是否@Transactional使用JPA / JTA进行事务控制?

我确实在网上阅读以消除疑虑,但是我没有得到直接的答案。任何输入都会有很大的帮助。

回答:

@Transactional如果Spring->Hibernate使用JPAie

@Transactional 注释应放在所有不可分割的操作周围。

让我们举个例子:

我们有2个模型的ie CountryCityCountryCity模型的关系映射就像一个国家可以有多个城市,因此映射就像,

@OneToMany(fetch = FetchType.LAZY, mappedBy="country")

private Set<City> cities;

在这里,国家/地区映射到多个城市,并懒洋洋地获取它们。因此,@Transactinal当我们从数据库中检索Country对象时,我们将获得Country对象的所有数据,但由于获得LAZILY而无法获取城市集,因此将发挥作用。

//Without @Transactional

public Country getCountry(){

Country country = countryRepository.getCountry();

//After getting Country Object connection between countryRepository and database is Closed

}

当我们要从国家对象访问城市集时,我们将在该集合中获得空值,因为仅创建了该集合的Set的对象未使用那里的数据初始化来获取我们使用的Set的值,@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,Service可以在单个事务中进行多个调用,而无需关闭与端点的连接。

希望这对你有所帮助。

以上是 JPA / JTA / @Transactional Spring批注 的全部内容, 来源链接: utcz.com/qa/413459.html

回到顶部