我正在处理一些旧的应用程序代码,其中似乎涉及到几个概念,因此我希望能够将它们改进为一个坚实而严格的实践。
基本上,整个代码都用这样的HibernateSessionRequest estFilter包装
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();
}
}
然后,有一个拦截器,做这样的事情
private String loadStaff(...) {
//...
try {
dbSession = //...;
dbSession.beginTransaction();
// some logic
dbSession.getTransaction().rollback();
} catch (RuntimeException e) {
//..
}
finally {
if (dbSession != null && dbSession.isOpen()) {
dbSession.clear();
}
}
}
然后还有更多的业务逻辑代码,包括更多的初始事务和会话清除等。
那么,问题是:
非常感谢。
您的代码应该是这样的,这是处理单个http请求事务的方法,
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
try {
// Open the transaction.
sf.getCurrentSession().beginTransaction();
// Handle the request
chain.doFilter(request, response);
// Persist the db changes into database.
sf.getCurrentSession().commit();
} catch (...) {
// Somthing gone wrong while handling the http request so we should remove all the changes and rollback the changes that are done in the current request.
sf.getCurrentSession().rollback()
} finally {
sf.getCurrentSession().close();
}
}
在代码的其他部分不应该处理事务的开始/关闭/提交。它应该只在一个地方处理。
下面的代码是否可以正常工作,或者我需要在工作之前开始交易。
我是WebServices的新手。Im通过标记为“Transacted”的camel路由向cxfendpoint发送webservice请求,并得到响应。在同一事务路由中,next语句抛出一个异常,以便我的异常处理程序回滚该事务。 我可以在我的事务回滚中找到其他东西,除了我的webservice请求响应,因为它已经提交了。
以下是使用事务教程中描述的提交和回滚的代码示例。 此示例代码是基于前面章节中完成的环境和数据库设置编写的。 复制并将以下示例代码保存到:CommitAndRollback.java 中,编译并运行如下 - 编译并运行结果如下 -
本文向大家介绍基于Postgresql 事务的提交与回滚解析,包括了基于Postgresql 事务的提交与回滚解析的使用技巧和注意事项,需要的朋友参考一下 用过oracle或mysql的人都知道在sqlplus或mysql中,做一个dml语句,如果发现做错了,还可以rollback;掉,但在PostgreSQL的psql中,如果执行一个dml,没有先运行begin;的话,一执行完就马上提交了,不能
问题内容: 我目前正在阅读Hibernate文档,并且遇到以下引号: 如果Session引发异常(包括任何SQLException),请立即回滚数据库事务,调用Session.close()并丢弃Session实例。某些会话方法不会使会话保持一致状态。Hibernate抛出的异常不能被视为可恢复的。通过在finally块中调用close()来确保关闭会话。 就我而言,这一切都说得通,但这确实让我想
问题内容: 在Hibernate中,当我在事务中有一个对象,然后回滚它时,保存的对象仍保留在DB中。奇怪,因为使用or 方法不会发生此问题,而只会使用。 这是我正在使用的代码: 这是 HibernateUtil 类(只是涉及的函数,我保证该方法能正常工作- 有一个Interceptor处理程序,但现在不重要了): 谢谢 问题答案: 检查数据库是否支持回滚,即是否使用的是InnoDB表而不是MyIS