为什么我的hibernate查询语句,在查询结果出来之后还会去更新数据? 25
我在做一个产品分页查询,只从数据库找些数据出来,为什么找出来了之后它还会有一堆的update语句,而且更新语句:updateproductsetname=?...wher...
我在做一个产品分页查询,只从数据库找些数据出来,为什么找出来了之后它还会有一堆的update语句,而且更新语句:update product set name =? ... where id=?,这些更新的数据跟原来数据库里的一摸一样,为什么?我只是单纯的找数据,没道理分页查询出10条记录之后又跑出10条对应的update,它不是吃多了吗?缓存也不是这意思啊??!!
急,特请教各位大侠.帮帮忙,谢谢了1
我用的是ssh做的,用hibernateTemplate....方法做的
session每次都是新的。所以我认为不存在缓存的管理问题 展开
急,特请教各位大侠.帮帮忙,谢谢了1
我用的是ssh做的,用hibernateTemplate....方法做的
session每次都是新的。所以我认为不存在缓存的管理问题 展开
3个回答
展开全部
不是吃饱了撑得,这个hibernate管理对象的生命周期的必然结果。假如你要从数据库查询产品 1>首先new个product对象(此时改对象为瞬态 没有纳入session管理) 2>从数据库查询获得product (此时product为持久态 即在数据库中有,内存中有 被session所管理。hibernate后台所执行的语句就是 select produc from ...)。3>查询完毕,你会提交事务,执行session.getTransation.commit;(其实这一步虽然你没显示的调用session.fush(),虚拟机也会自动调用,这样就是清理内存中的脏数据,将内存中的持久太对象保存到数据库 hibernate后台在这里执行了update product set name ...。product由持久太编程离线状态也成托管状态)。这里你的疑问就改明白了吧。实体对象的生命周期里,还有几种状态转换,自己好好看看吧。 hibernate这样设计自然是有他的好处--不用人工的进行脏数据检查,hibernate帮你做,免得疏忽大意导致对象没有持久化,有点类似于java虚拟机中的垃圾回收机制。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询