Session线程绑定

为什么Session需要线程绑定?

比如说:扣款,一般是从数据库中查Card对象,再对卡的金额修改,两个操作,如果,查询出Card这个对象使用了一个会话,然后关闭会话,Card这个对象编程托管了,然后再开启一个会话再让这个托管的Card持久化,假如这时候,又一个扣款请求进来要求扣款,把余额扣光了,然后第一个托管的对象持久化了,然后进行扣款,由于判断余额的查询会话关闭了,所以,不会对再对余额进行判断了,扣款依旧执行。明明已经没钱了,还进行扣款,就不符合逻辑了,于是有了Session线程绑定,将一个请求的所有操作,在一个会话中进行更安全、可靠。


以上只是我个人的理解,理解能力有限,有哪些不对的地方,望予以改正。


要让Session绑定线程,首先配置HIbernate的主配置文件:

如下:

添加一个property节点,name为:current_session_context_class,属性值:org.hibernate.context.ThreadLocalSessionContext这个代表着线程绑定(共有3种值,有兴趣的可以看hibernate文档,这里只讲最通用的一种),可以简写为:thread.

如下:

到此,hibernate配置完成了,接下来就是在Java中调用了:



注意的是:1.绑定线程的Session是不需要关闭的,当事务提交后会自动关闭,当你手动关闭时会报此会话已经关闭的错误。

                     2.因为事务一提交,会话就会自动关闭的缘故,所以一个事务只能对应一个会话.





posted @ 2012-05-06 14:00  hibernate3例子  阅读(1707)  评论(0编辑  收藏  举报