Ich war mit Hibernate und wollte wissen, wie Hibernate verarbeitet, während mehrere Benutzeranforderung kommt.Hibernate Save-Methode und Parallelität
@Transaktional auf Datenschichtmethode.
User user = new User();
user.setCreatedBy("TestSad");
user.setUsername("TestSadd");
Integer id = (Integer) this.sessionFactory.getCurrentSession().save(user);
// put the debug point here
int i = 1;
if(i ==1){
// intentionally i was throwing exception as i dont want to save
throw new NumberFormatException();
}
Für meinen Tests habe ich ein Browser Chrome geöffnet und drücken Sie die Transaktion i den ID-Wert um eins erhöht haben, was in db vorhanden ist. Ich habe den Debug-Punkt nicht geschlossen. sag id = 10 Danach habe ich einen weiteren Browser Firefox geöffnet und die Transaktion traf ich bekam den ID-Wert um eins erhöht, was ich beim Debuggen mit Chrome Browser bekam. sag id = 11
Nächstes Szenario. Ich habe den Server neu gestartet. Wieder fortgesetzt die oben genannten Schritte Ich bekomme Werte jedes Mal um eins erhöht. sagen ID 12.
So ist es wirklich gut Winterschlaf auf diese Weise arbeiten, um Probleme zu vermeiden. Ich habe Google-Foren durchlaufen, um zu verstehen, wie es funktioniert, aber es nicht richtig bekommen. Handelt es sich bei Hibernate um die interne Behandlung von ACID? Kann mir bitte jemand helfen, es zu verstehen. Nur neugierig zu wissen.
Bitte beachten Sie die folgende Antwort. http://stackoverflow.com/questions/3616321/concurrent-updates-handling-in-hibernate –
oder überprüfen Sie dies [Antwort] (http://stackoverflow.com/questions/22030448/is-sessionfactory-getcurrentessession-thread- sicher/22030598 # 22030598). – AntJavaDev