不是吃饱了撑得,这个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虚拟机中的垃圾回收机制。
是不是你的查询方法里面有属性的setXXX()方法啊
把hibernate的显示sql打开,用打印的sql去数据库执行下,应该就能知道问题原因了
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....