Hibernate get 和load的区别

1 load是要用的时候才从数据库去查询,get 是马上查询。

2 对于不存在的记录,get会报空指针异常,load会报

org.hibernate.ObjectNotFoundException: No row with the given identifier exists

使用load时,此时的user对象是一个代理对象,仅仅保存了当前的这个id值,当我们试图得到该对象的username属性时,这个属性其实是不存在的,所以就会报出ObjectNotFoundException这个异常了。

3 org.hibernate.LazyInitializationException

这个异常是因为session关闭了,解决这个的方法有两种,一种是将load改成get的方式来得到该对象,另一种是在表示层来开启我们的session和关闭session。

参见:http://www.cnblogs.com/xiaoluo501395377/p/3371776.html

时间: 2024-08-02 02:59:37

Hibernate get 和load的区别的相关文章

hibernate get和load的区别

区别主要有三点: 1,load返回的是代理对象,等到真正使用对象的内容时才会发出sql语句. 2,get直接从数据库加载,不会延迟. 3,不存在对应记录时表现不一样. 无论是get还是load,都会首先查找缓存(一级缓存),如果没有才会去数据库查找.调用clear()方法可以清除session缓存,调用flush()方法可以强制进行从内存到数据库的同步. 具体分析如下: 在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通过session.get()方法,另一种就

Hibernate之查询中get()和load()的区别,list()和iterate()的区别

[Hibernate]之查询中get()和load()的区别,list()和iterate()的区别 list()查询 //一次性把数据对象取出来 @Test public void findTestList(){ Session s=sessionFactory.getCurrentSession(); s.beginTransaction(); List<Person> persons=s.createQuery("from Person").list(); for(P

力所能及之Hibernate中get(),load()区别

get和load的区别: * get不支持延迟加载,而load支持. * 当查询特定的数据库中不存在的数据时,get会返回null,而load则抛出异常. 从返回结果上对比 load 方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常 get 方法检索不到的话会返回null 从检索机制上对比:get方法直接从数据库中检索,而load方法的执行则比较复杂,首先查找session的persistent Context中是否有缓存, 如果有则直接返回,

Hibernate的Session的get()和load()方法区别

hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别. get Session接口提供了4个重载的get方法,分别通过"持久类+主键"和"全类名+主键"以及"锁选项"来获取实体对象. public Object get(Class clazz, Serializable id); public Object get(Class clazz, Serializable i

ready与load的区别

JQuery里有ready和load事件 $(document).ready(function() { // ...代码... }) //document ready 简写 $(function() { // ...代码... }) $(document).load(function() { // ...代码... }) 他们的主要区别为ready先执行,load后执行. DOM文档加载的步骤: (1) 解析HTML结构. (2) 加载外部脚本和样式表文件. (3) 解析并执行脚本代码. (4)

Hibernate get和load区别(转)

get和load方式是根据id取得一个记录下边详细说一下get和load的不同,因为有些时候为了对比也会把find加进来. 1.从返回结果上对比:load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常get方法检索不到的话会返回null 2.从检索执行机制上对比: get方法和find方法都是直接从数据库中检索 而load方法的执行则比较复杂首先查找session的persistent Context中是否有缓存,如果有则直接返回 如果没有则

Hibernate中get()和load()的区别

Hibernate中根据Id单条查询获取对象的方式有两种,分别是get()和load(),来看一下这两种方式的区别. 1. get() 使用get()来根据ID进行单条查询: User user=session.get(User.class, "1"); 当get()方法被调用的时候就会立即发出SQL语句: Hibernate: select user0_.ID as ID1_1_0_, user0_.CREATETIME as CREATETI2_1_0_, user0_.UPDAT

Hibernate中使用load和get加载的区别

一. Hibernate使用load机制和使用get加载的区别(重点) 1.相同点:get 和load他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例 2. 不同点:如果找不到符合条件的纪录,get()方法将返回null.而load()将会报出ObjectNotFoundEcception. 2.1get 是直接从数据库中检索   而load会使用懒加载(延迟加载)产生一个代理对象,属性oid 2.2 使用load加载,Hibernate会认为该id对应的对象是一定存在的,所

Hibernate单表操作(六)——查询记录get()与load()方法区别

转载请注明:http://blog.csdn.net/uniquewonderq 在上一次的案例中,通过get或者load方法得到的结果一样. 既然得到的结果一样, 那么  get和load方法查询记录的区别是什么呢? 区别一: 在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,发出selelct语句,去查找这个记录或者说对象,返回本身的持久化对象. load方法会在调用后返回一个代理对象. 该代理对象只保存了实体对象的主键id,直到真正使用对象的非主键属性时才会发出sql