Ich bin mit einigen alten Anwendungscode, und es scheint mehrere Konzepte beteiligt, so dass ich schauen, um sicherzustellen, dass ich sie zu einem festen und verbessern kann strenge Praxis.Hibernate-Transaktion starten/Rollback/commit vs. auch session.clear()
Grundsätzlich ist der gesamte Code mit einem HibernateSessionRequestFilter wie diese
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
try {
sf.getCurrentSession().beginTransaction();
chain.doFilter(request, response);
sf.getCurrentSession().clear();
} catch (...) {
//...
} finally {
sf.getCurrentSession().close();
}
}
Dann gewickelt wird, gibt es einen Abfangjäger, so etwas wie diese
private String loadStaff(...) {
//...
try {
dbSession = //...;
dbSession.beginTransaction();
// some logic
dbSession.getTransaction().rollback();
} catch (RuntimeException e) {
//..
}
finally {
if (dbSession != null && dbSession.isOpen()) {
dbSession.clear();
}
}
}
tut Und dann gibt es noch mehr Business-Logik-Code mit einigen weiteren Starttransaktionen und Sitzung löschen usw.
So, Fragen:
- Was passiert, wenn beginTransaction mehr als einmal in derselben Sitzung aufgerufen wird?
- Manchmal ruft "clear()" Ausnahme, ich denke, es passiert, nachdem ein "rollback()" aufgerufen wurde. Wie behebt man das?
- Im Allgemeinen, was ist die beste vorgeschlagene Praxis session.clear() mit Transaktion beginnen/Rollback/Commit kombinieren?
Danke
Warum löschen Sie die Sitzung an erster Stelle? Was denkst du tut es? Warum setzen Sie die Transaktion zurück und binden sie nicht ein? Was denkst du tut es? Lesen Sie das Javadoc dieser Methoden und das [javadoc von beginTransaction] (https://docs.jboss.org/hibernate/orm/5.1/javadocs/org/hibernate/SharedSessionContract.html#beginTransaction--), das * * sagt ** was passiert, wenn es mehrmals in derselben Sitzung aufgerufen wird. Haben Sie https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html#transactions-api gelesen, in denen die Verwendung von Transaktionen erläutert wird? –