@Transactional
Um alle untrennbaren Vorgänge sollten Anmerkungen gemacht werden. Verwendung von @Transactional
Wenn in diesem Fall eine andere Methode von der aktuellen Methode aufgerufen wird, hat diese Methode die Möglichkeit, der laufenden Transaktion beizutreten.
Nehmen wir also ein Beispiel:
Wir haben 2 Modelle, d.h. Country
y City
. Relationales Mapping von Country
y City
Modell ist wie ein Country
kann mehrere Städte haben, so dass die Zuordnung wie folgt ist,
@OneToMany(fetch = FetchType.LAZY, mappedBy="country")
private Set<City> cities;
Hier Land, das mehreren Städten zugeordnet ist und sie abruft Lazily
. Hier kommt also die Rolle der @Transactinal
Wenn wir das Objekt "Land" aus der Datenbank abrufen, erhalten wir alle Daten des Objekts "Land", aber nicht den Satz der Städte, da wir die Städte abrufen. LAZILY
.
//Without @Transactional
public Country getCountry(){
Country country = countryRepository.getCountry();
//After getting Country Object connection between countryRepository and database is Closed
}
Wenn wir auf den Satz von Städten aus dem Landobjekt zugreifen möchten, erhalten wir Nullwerte in diesem Satz, weil das Objekt des Satzes nur erstellt wird, dieser Satz nicht mit Daten initialisiert wird, um Werte des Satzes zu erhalten, den wir verwenden @Transactional
d.h.,
//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();
}
Also grundsätzlich @Transactional
is Service kann mehrere Anrufe in einer einzigen Transaktion tätigen, ohne die Verbindung mit dem Endpunkt zu beenden.