首先附上一张图片便于理解:
由图片可知hibernate对象有四种状态,他们分别是:
1.临时状态:未保存到数据库前的状态,临时状态若无操作则也会自动进入垃圾回收站,
2.持久化状态:session和数据库中都有
3.游离状态:数据库中有session中没
4.删除状态:数据库session都没
再此需要注意:使用的一些保存的方法,存的数据在session的缓存中,而提交数据后才是进入数据库中。而sql语句在commit()之前出现。
对象状态的转换:
临时状态->持久化状态使用的方法:
1》.save(t);
2》.persist(t);
3》.saveOrUpdate(t);
使用save和persist(持久化)和saveOrUpdate
区别 save中不强制主键生成约束,赋值主键成功,由hibernate赋值
persist中强制主键生成约束,赋值主键失败,由用户赋值,(做了一个认证主键的动作)
saveOrUpdate
若主键生成策略定义为用户自定义
则必须赋值id, 且sql语句为insert
若主键生成策略定义为hibernate自定义
若有id则为update 若无id则为insert
无->持久化状态使用的方法:
1》.get(class,string);
2》.load(class,string);
区别 :
get:即时加载,立即调用sql语句,
若数据库没有相应的记录,返回为null,
session关闭后,也可以使用对象
load:延迟加载,
不会调用sql语句,用的时候调用sql语句
若数据库没有相对应的记录则报错
session关闭后,出现懒加载的现象
-->懒加载(Load On Demand)是一种独特而又强大的数据获取方法,它能够在用户滚动页面的时候自动获取更多的数据,而新得到的数据不会影响原有数据的显示,同时最大程度上减少服务器端的资源耗用。
游离化状态的前提是session未关闭,无缓存可以。
持久化状态->游离化的状态使用的方法:
1》.close();
2》.clear();
3》.evict();
游离化的状态->持久化使用的方法:
1》.saveOrUpdate(t);
2》.update(t);
持久化的状态/游离化状态->删除状态使用的方法:
1》.delete(t);
此方法效果为替换,未删除数据库的对象