@Transactional
in case of Spring->Hibernate
using JPA
i.e.
@Transactional
Annotations should be placed around all operations that are inseparable.
So lets take example:
We have 2 model's i.e. Country
and City
.
Relational Mapping of Country
and City
model is like one Country can have multiple Cities so mapping is like,
@OneToMany(fetch = FetchType.LAZY, mappedBy="country")
private Set<City> cities;
Here Country mapped to multiple cities with fetching them Lazily.
So here comes role of @Transactinal
when we retrieve Country object from database then we will get all the data of Country object but will not get Set of cities because we are fetching cities LAZILY.
//Without @Transactional
public Country getCountry(){
Country country = countryRepository.getCountry();
//After getting Country Object connection between countryRepository and database is Closed
}
When we want to access Set of Cities from country object then we will get null values in that Set because object of Set created only this Set is not initialize with there data to get values of Set we use @Transactional
i.e.,
//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();
}
So basically @Transactional
is Service can make multiple call in single transaction without closing connection with end point.
Hope this will helpful to you.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…