Hibernate中load与get,update与merge方法的区别
2017-05-04 21:42
363 查看
1、load()与get()的区别:
(1)load()读取
Java代码
User user = (User)session.load(User.class, userId);
(2)get()读取
Java代码
User user = (User)session.get(User.class, userId);
以上是load与get的读取方式,看上去差不多,以下来说说他们的区别:
(1)load方法读取是假定在数据库中存在的,如果在数据库中不存在,则会抛出异常;
而get方法不会去假定数据库中是否存在,如果不存在则返回null。
(2)load方法返回的是实体类的代理类,因此load方法可以使用lazy策略来加载对象;
get方法返回的可能是实体类也可能是代理类,因为get方法如果在session缓存(一级缓存)中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象。
Java代码
User user = (User)session.load(User.class, userId);
这句代码不会立即发出sql,只有用到user对象时才会去查询。
Java代码
User user = (User)session.get(User.class, userId);
以上代码会立刻做查询。
2、saveOrUpdate()与merge()的区别:
(1)saveOrUpdate:
如果saveOrUpdate(新po)与另一个与本session关联的po对象拥有相同的持久化标识(identifier),抛出一个异常 org.Hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session,saveOrUpdate如果对象没有持久化标识(identifier)属性,对其调用save() ,否则update() 这个对象。
(2)如果session中存在相同持久化标识(identifier)的实例,用用户给出的对象覆盖session已有的持久实例。
3、evict()与clear()的区别:
clear完整的清除session缓存
evcit(obj)把某个持久化对象从session的缓存中清空。
(1)load()读取
Java代码
User user = (User)session.load(User.class, userId);
(2)get()读取
Java代码
User user = (User)session.get(User.class, userId);
以上是load与get的读取方式,看上去差不多,以下来说说他们的区别:
(1)load方法读取是假定在数据库中存在的,如果在数据库中不存在,则会抛出异常;
而get方法不会去假定数据库中是否存在,如果不存在则返回null。
(2)load方法返回的是实体类的代理类,因此load方法可以使用lazy策略来加载对象;
get方法返回的可能是实体类也可能是代理类,因为get方法如果在session缓存(一级缓存)中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象。
Java代码
User user = (User)session.load(User.class, userId);
这句代码不会立即发出sql,只有用到user对象时才会去查询。
Java代码
User user = (User)session.get(User.class, userId);
以上代码会立刻做查询。
2、saveOrUpdate()与merge()的区别:
(1)saveOrUpdate:
如果saveOrUpdate(新po)与另一个与本session关联的po对象拥有相同的持久化标识(identifier),抛出一个异常 org.Hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session,saveOrUpdate如果对象没有持久化标识(identifier)属性,对其调用save() ,否则update() 这个对象。
(2)如果session中存在相同持久化标识(identifier)的实例,用用户给出的对象覆盖session已有的持久实例。
3、evict()与clear()的区别:
clear完整的清除session缓存
evcit(obj)把某个持久化对象从session的缓存中清空。
相关文章推荐
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
- [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
- Hibernate merge、update与saveOrUpdate方法的区别
- 【hibernate merge】session1.merge(T entity)方法的含义和update方法的区别
- Hibernate中get方法和load方法的区别
- Hibernate get 和 load方法区别
- Hibernate中get和load方法的区别
- Hibernate中GET和LOAD方法的区别
- hibernate的load和get方法的区别
- Hibernate中get和load方法的区别
- Hibernate中get和load方法的区别
- Hibernate加载数据时get和load方法的区别
- Hibernate的merge与update方法的区别