Bazı eski uygulama kodlarını kullanıyorum ve bazı kavramlar var gibi görünüyor, bu yüzden bunları tek bir katı haline getirebileceğimden emin olmak istiyorum. sıkı uygulama.Hazırda bekleme işlemine başlama/geri alma/taahhüt vs. de session.clear()
Temelde, bütün kod O zaman bu
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();
}
}
gibi HibernateSessionRequestFilter ile sarılır, bu
private String loadStaff(...) {
//...
try {
dbSession = //...;
dbSession.beginTransaction();
// some logic
dbSession.getTransaction().rollback();
} catch (RuntimeException e) {
//..
}
finally {
if (dbSession != null && dbSession.isOpen()) {
dbSession.clear();
}
}
}
böyle bir şey yaptığını, bir avcı var Ve sonra daha da iş mantığı kodu vardır Daha fazla begintransactions ve session clear vs. ile birlikte
Sorularınız için:
- StartTransaction aynı oturumda birden çok kez çağrıldığında ne olur?
- Bazen, "clear()" ifadesini çağırmak istisna atar, sanırım "rollback()" çağrıldıktan sonra olur. Bunu nasıl düzeltebilirim?
- Genel olarak, session.clear() işlemini transaction begin/rollback/commit ile birleştirmek için önerilen en iyi uygulama hangisidir?
teşekkür ederiz
İlk olarak oturum neden temizleniyor? Sence ne yapar? İşlemi neden geri alıyorsunuz ve işlemiyorsunuz? Sence ne yapar? Bu yöntemlerin javadoc'unu ve [beginTransaction] 'ın javadoc'unu okudunuz (https://docs.jboss.org/hibernate/orm/5.1/javadocs/org/hibernate/SharedSessionContract.html#beginTransaction--) * aynı oturumda birden çok kez çağrıldığında ne olduğunu söyler. İşlemleri nasıl kullanacağınızı açıklayan https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html#transactions-api okudunuz mu? –