0
私はいくつかの古いアプリケーションコードの取り扱い、および関連するいくつかの概念があるようですので、私は、私は固体の1にそれらを改善できることを確認するために探していますていますし、厳格な練習。取引を休止/ロールバックを開始/(もsession.clear対をコミット)
基本的には、全体のコードはその後、この
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();
}
}
のようなHibernateSessionRequestFilterでラップされ、この
private String loadStaff(...) {
//...
try {
dbSession = //...;
dbSession.beginTransaction();
// some logic
dbSession.getTransaction().rollback();
} catch (RuntimeException e) {
//..
}
finally {
if (dbSession != null && dbSession.isOpen()) {
dbSession.clear();
}
}
}
ようなものをやって、インターセプタがあり、その後、さらに多くのビジネス・ロジック・コードがありますいくつかのより多くのトランザクションとセッションのクリアなど。
したがって、質問:
- beginTransactionが同じセッションで複数回呼び出された場合はどうなりますか?
- 「clear()」を呼び出すと例外がスローされることがありますが、「ロールバック()」が呼び出された後に発生すると思います。それを修正するには?
- 一般的に、session.clear()とトランザクションbegin/rollback/commitを組み合わせるのに最適な方法は何ですか?
はありがとう
なぜ最初にセッションをクリアしますか?それはどういうことだと思いますか?なぜトランザクションをロールバックし、コミットしないのですか?それはどういうことだと思いますか? *これは、あなたのそれらのメソッドのjavadocは、および[のbeginTransactionのjavadocを](https://docs.jboss.org/hibernate/orm/5.1/javadocs/org/hibernate/SharedSessionContract.html#beginTransaction--)を読みました*同じセッションで複数回呼び出されたときに何が起こるかを言う**。あなたは、トランザクションを使用する方法について説明している、https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html#transactions-apiを読むことがありますか? –