Hibernate里的 getCurrentSession取的当前session是由谁管理的?是Spring吗?
答案:3 悬赏:0
解决时间 2021-03-01 20:48
- 提问者网友:唤魂
- 2021-03-01 13:51
现在问题是 先用HQL查询出了持久化对象,再修改了这个对象 然后由于hibernate关系 自动给这些持久化对象更新。问题是如果中间再有一个HQL查询 也是用了 getCurrentSession 那save方法后session会关闭吗?那第一个用HQL查的对象 还能自动更新吗?
如;
List list = this.getRecoverTCSharedStockDAO().getSaleOrderDetail();//这里查粗来的对象是持久化的对象
deliverGVS(list); 这个方法里 给每个持久化对象 set新值
这样最后没问题 能自动对这些更改的持久化对象更新
问题是:
List list = this.getRecoverTCSharedStockDAO().getSaleOrderDetail();
加了: 新表的查询 但dao层用的还是getCurrentSession
List list2 = this.getRecoverTCSharedStockDAO().getSaleOrderDetail();
然后进行了 save(list2)操作 就是往list2里插入了新对象 ,
问题来了。。。这里会不会关闭了之前的第一个session??
执行完上面的save session还存在吗?我看网上说持久化对象都是跟session关联的,那这个session是什么结果呢?
deliverGVS(list);
补充问题:我这里用HQL查出了持久化对象 并给这些对象set了几个属性。然后没有对其进行update()方法的操作,因为持久化对象不用update 也会自动更新。但前提是这个getCurrentSession没有被关闭。我现在担心的是这个session会不会因为中途的save或者update操作给关闭了 那我这个本来持久化的对象 不能自动更新。。。
进一步的研究: 事务是执行完前缀名字方法名的 就提交,但问题又出来了,如果2个事务都会被一个session管理 那如我上面问的题一样 方法体中的一个事务提交 会不会导致 session的关闭?如果不是 那又是因为什么原因 又再哪个配置文件里呢?
最佳答案
- 二级知识专家网友:初心未变
- 2021-03-01 14:14
描述的不够清楚,不清楚你的事务边界,贴出代码看看
全部回答
- 1楼网友:湫止没有不同
- 2021-03-01 17:07
那是你的事务没有提交!因为事务默认是不提交的.
如果你在web.xml中配置一个opensessiononview就没问题了!
- 2楼网友:不服输就别哭
- 2021-03-01 15:30
不是,是由hibernate的SessionFactory去管理的。底层的原理你得去看源码了。
我要举报
大家都在看
推荐资讯