最近在用ssh框架的时候遇到几个hibernate的问题,最终还是解决了,但不是很理解其运行原理,简单总结一下遇到的问题,并且解决办法;
hibernate存在三个状态:瞬时状态,持久状态,游离状态,三种状态转化如下:
转化图瞬时状态好理解,new一个对象出来的时候就是一个瞬时状态,数据库中没有对应的数据;
持久化状态,对瞬时状态的对象保存到数据库,在数据库中有对应的数据;
离线状态就是数据库中有,但是session中不存在该对象;
更新操作:
这次更新与删除有些不同,如果程序是这样,则更改其中一个停车场之后,在重新加载停车场,则查询到的数据与更改前一样,没有变;第一次获得的user是托管状态,updateObj(user)之后就变成持久化状态,更改停车场数据之后,停车场数据已经改变,但是再次调用该方法查询停车场数据时,User user = (User) httpsession.getAttribute("user");user因为是游离状态(数据中记录仍然是修改之前的【我是这样理解的】),从输出结果图可以看出update()方法更新时候,调用update()方法变成持久化状态,所以在次调用user.getParjing_lots()方法时候获取的数据仍然是之前的,user.getParking_lots();获取到的与之前获取到的值一样,没有更新,换成id查询之后就解决了。
输出结果理解可能不到位,我还没有完全掌握hibernate,
网友评论