页面提交后的Spring-Hibernate提交事务

时间:2015-07-29 13:00:33

标签: hibernate spring-mvc

休眠 使用@Transactional Annotation。

我的MVC层是控制器,模型,服务和DAO

我的要求是当我打开我的页面时,我想使用DB Procedure将数据保存到DabaBase但不提交, 我想将这些数据置于保持状态。

当该页面打开时我想做一些计算,当用户点击提交按钮时,我想提交保存数​​据.. 但是使用@Transaction它是不可能的,所以提交上一个事件的数据

1 个答案:

答案 0 :(得分:0)

长时间运行的交易存在很大问题。我建议找一种替代方法:

  1. 用户打开弹簧控制器URL
  2. 将您的数据放入存储此过渡数据的特殊表格/表格中
  3. 在提交时,从#2中的表中获取数据,使用它并删除
  4. 使用跨越2个用户请求的事务有明显的问题。如果用户在第一次请求后关闭浏览器/丢失网络会发生什么。您有未提交的数据,可能存在行/表级别锁定,这可能会降低您的应用程序。

    如果您仍然认为您想要使用长期运行的交易,可能的方法之一是:

    1. 您需要使用progrmmatic事务管理。直接访问hibernate会话(而不是通过注释)
    2. 在第一次请求时将hibernate会话对象存储在http sesssion中
    3. 在第二个请求中提交会话并关闭它并从http会话中删除。
    4. 有一个http会话监听器,在会话中销毁对hibernate会话对象的检查并关闭它。
    5. 事务超时session.getTransaction().setTimeout(),以便用户在30秒内没有响应时,您的事务仍将结束解锁基础数据库资源