我正在阅读使用Spring框架进行的事务管理。在第一个组合中,我使用了Spring + hiberante,并使用了Hibernate的API来控制事务(Hibenate API)。接下来,我想使用@Transactional注释进行测试,它确实起作用。
@Transactional
我对此感到困惑:
就像我们拥有JTA一样,是真的可以使用Spring和JTA来控制事务吗?
我确实在网上阅读以消除疑虑,但是我没有得到直接的答案。任何输入都会有很大的帮助。
@Transactional如果Spring->Hibernate使用JPAie
Spring->Hibernate
JPA
@Transactional 注释应放在所有不可分割的操作周围。
让我们举个例子:
我们有2个模型的ie Country和City。Country和City模型的关系映射就像一个国家可以有多个城市,因此映射就像,
Country
City
@OneToMany(fetch = FetchType.LAZY, mappedBy="country") private Set<City> cities;
在这里,国家/地区映射到多个城市,并懒洋洋地获取它们。因此,@Transactinal当我们从数据库中检索Country对象时,我们将获得Country对象的所有数据,但由于获得LAZILY而无法获取城市集,因此将发挥作用。
@Transactinal
//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可以在单个事务中进行多个调用,而无需关闭与端点的连接。
希望这对你有所帮助。