用户登录
用户注册

分享至

hibernate 数据不一致

  • 作者: 若无相见怎会遇见65244452
  • 来源: 51数据库
  • 2021-01-19
你所看到的数据库没反映并不是说数据库没有进行任何的更改

而是数据同步的问题

就像你同时打开两个超作数据库的窗口

在其中一个插入数据,不commit,在另外的窗口就查询不出来

但是在插入窗口是可以查询出来的

hibernate就像是你开的第二个窗口

当然楼上说的很对不修改数据库的数据是不会存在数据不同步的说法的。

这不是hibernate本身的问题哦
建议你看下数据库的知识哦
另外,站长团上有产品团购,便宜有保证



  我个人觉得是你这里的getcurrentsession没有提交事务,导致执行了更新操作 但实际底层没有提交事务,意思就是说最终没有进行commit 而不是你说的线程延迟什么问题。

getcurrentsession()和opensession() 的区别重点不是在于线程问题,而是管理事务回滚问题。

比如你用getcurrentsession取了当前session,当你循环list对象并更新每个对象里的一个字段时报了错误,那很多项目中根据公司需求得进行回滚,比如回滚整个list对象,或者回滚当前这一个对象并继续更新下一个对象等。当你用当前session了说明你的每个对象对应的每个事物都被一个session管理,而用了opensession说明你的每个对象每次开启了新session 不但占用了很多资源,而且每个session对应一个事务。大多数情况都是封装用getcurrentsession因为每次逻辑都用一个session来管理 也不占资源。

每次取session时候底层都用的是sessio。load方法,这个方法 就跟hibernate懒惰加载有关系,就比如楼上说的改成lazy=false 但这个也不建议改,如果用了lazy=false了说明勤奋加载 那样程序负担太大。
自从用了spring开始,线程安全,同步都归spring的threadlocal管理,用的是临时线程变量机制,一般不会出现并发报错问题。
希望对你有所帮助
软件
前端设计
程序设计
Java相关