因为就有的历史遗留问题,存在下面的使用场景: 1.在一个Request中执行SQL语句,比如Update 2.UI上可能由一个Button(比如Commit),执行时才真正COmmit数据,此时属于另外一个Request。 (这个不合理,大家都知道,应该马上提交,否则容易引起数据库死锁。但是,实实在在存在。我们是通过自己创建的虚假的DummySession,每次Request都会讲这个Dummy Session标志放到Request中,两次Request时的Session相同说明属于同一个会话。)
参照了Spring的PlatformTransactionManager文档,发现事务此Class和DataSource并没有直接关联,而是通过TransactionSynchronizationManager这个CLass,利用TheadLocal的方式在DataSource(以及其创建的Connection)和Transaction之间建立关联。这样的话,如果上面1、2两个步骤在同一个Thread中肯定就没有问题,但是我们这种情况就没法保证是同一个Session了。
不知道什么方式可以实现这个需求,请指教!
UI上可能由一个Button(比如Commit),执行时才真正COmmit数据,此时属于另外一个Request。 这个是两次请求,ThreadLocal肯定解决不了, 你上边提到了这个呢 需要把数据先放到session中/隐藏表单,当点击按钮时才去保存数据;;;或者建立一个临时表 这个临时表存储着数据的序列化/json形式的数据(持久存储了),页面存储一个id,点击按钮时取出来然后保存到数据库
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。