Hibernate中Session的几个方法介绍

来源:互联网 发布:nba2013 14总决赛数据 编辑:程序博客网 时间:2024/05/02 05:07


get load

1:get
public Object get(Class clazz, Serializable id) 两个条件 什么样的类, id是多少 就可以拿到类了
根据主键得到类,只是查询操作一般不用管事务
局限性:get方法只能通过id拿到对象 其他查询可以用query hql  和criteria方式 

2:load  
public  Object load(Class clazz, Serializable id)
和get 相似,使用的频率低一些,和get的区别,不会立即访问数据库,等真正使用要查找的类的时候,才会去访问数据库 load返回的永远不为null, 会是一个代理对象
实现细节: 它自己new 了一个继承至需要查询的对象,我们的pojo类不能是final的也是这个原因。
懒加载:


save persist

3,persist 
保存 同 save一致 
唯一区别: 在不开启事务的时候,persist不产生insert语句,数据库更没有数据了。
4,save
不开启事务时,会产生insert语句,数据库里没有数据。


savaOrUpdate  update  merge 
当我们要保存一个对象,却不知道数据库里有没有的时候,不知道它是瞬时对象,还是脱管对象,就可以用
5 saveOrUpdate
hibernate会自己根据ID(判断ID是否有值,瞬时态的ID是没有值的 整形的id为0是瞬时态  String 的ID为null是瞬时态  可以通过映射文件中的 id 节点中的 unsaved-value 进行配置)和version的值判断对象是否是瞬时对象还是脱管对象,选择调用save 还是update
另外 调用saveOrUpdate后 对象会变成持久态,而merge还是托管态

6.update 
更新对象,如果没有记录会出现异常
当对象处于脱管状态的时候,就可以调用更新,然后更新到数据库

7:merge
将对象更新,调用之后还是托管态。



对象状态转移图:


0 0
原创粉丝点击