Nicht sicher, ob "Geltungsbereich" hier der richtige Begriff ist.Soll ich den Umfang von @Transactional minimieren?
Ich verwende Spring für JPA-Transaktionsverwaltung (mit einem Hibernate darunter). Meine Methode Datenbanktransaktion Preform ist privat, aber da Sie nur @Transactional auf einer Klasse oder auf einem public method
Da dieser Mechanismus auf Proxies basiert gesetzt, nur ‚externe‘ Methode aufruft, kommt in durch den Proxy abgefangen werden. Dies bedeutet, dass "Selbstaufruf", d. H. Eine Methode innerhalb des Zielobjekts, die eine andere Methode des Zielobjekts aufruft, selbst dann nicht zu einer tatsächlichen Transaktion führt, wenn die aufgerufene Methode mit @Transactional!
Ich habe den öffentlichen Einstiegspunkt der Klasse als @Transactional gesetzt.
@Transactional
public void run(parameters) {
//First non-database method, takes a decent amount of time
Data data = getData();
//Call to database
storeData(data);
}
private storeData(data) {
em.persist(data);
}
Ist das eine schlechte Übung? Ist Spring länger offen als nötig? Ich dachte daran, die storeData() -Methode in eine DAO-Klasse zu verschieben und öffentlich zu machen, aber als akademischer Punkt wollte ich wissen, ob die Umgestaltung der Öffentlichkeit einen Leistungsvorteil bringen würde.
Ich habe zwei Antworten hier, dass, wenn ich sie richtig verstehe, gegensätzliche Dinge sagen, kann jemand anderes auf diese Frage einwiegen? –
Die Frage http://stackoverflow.com/questions/1079114 hat eine gewisse Relevanz für diesen. –