hibernate 保存数据失真
- 作者: Alwayshere32782496
- 来源: 51数据库
- 2021-01-18
你的session是不是没有关闭过啊,我遇到过因session未关闭引起的数据不一致的情况.貌似多个session实例间的数据不是同步或共享的.比如,你创建了session1,session2.在request1中使用session1添加了数据user1,在request1结束后的另一个请求中使用了session2查询user1,可能就会查询不到你上个请求中所保存的数据(数据已存在数据库中).
还有其他很多数据不一致的情况.比如明明已经更新数据了(数据库中的数据是正确的,但就是查询出的数据是更新前的),数据删除了还能查询到(数据库中已没有数据了)等等.
我当时是没有关闭ThreadLocal中的session,也不知道是不是我有什么地方设置错了还是其他的问题...后来就在request结束时把session关闭掉就好了.
其实也可能是你的hibernate配置关系的时候 没有级联操作或者其他的。这些都会导致以上你所发生的。这个跟你的事务是没有关系的。
有没有主键?有没有唯一标识?有没有用到持久化?有的话,id相同时只会更新不会保存,没有用到的话会,唯一标识主键会报错
可以查看一下web.xml里面加一个
OpenSessionInViewFilter
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
OpenSessionInViewFilter
*.action
session没关掉
session.close()
那么久,还没碰到,看你咋写法的了
还有其他很多数据不一致的情况.比如明明已经更新数据了(数据库中的数据是正确的,但就是查询出的数据是更新前的),数据删除了还能查询到(数据库中已没有数据了)等等.
我当时是没有关闭ThreadLocal中的session,也不知道是不是我有什么地方设置错了还是其他的问题...后来就在request结束时把session关闭掉就好了.
其实也可能是你的hibernate配置关系的时候 没有级联操作或者其他的。这些都会导致以上你所发生的。这个跟你的事务是没有关系的。
有没有主键?有没有唯一标识?有没有用到持久化?有的话,id相同时只会更新不会保存,没有用到的话会,唯一标识主键会报错
可以查看一下web.xml里面加一个
session没关掉
session.close()
那么久,还没碰到,看你咋写法的了
推荐阅读
