Hibernate中session 的get()跟load() 两个方法的区别之处

Hibernate中session 的get()和load() 两个方法的区别之处

1、访问DB后当找不到符合条件的数据,get()方法将返回null;而load()将会报出ObjectNotFoundEcception。

2、执行get()方法是会访问DB进行SQL操作;而load()则不进行SQL的任何查询动作,只有在真正用到对象的属性时才执行数据的查询操作。

3、load()方法可以返回实体的代理类,get()方法则返回真是的实体类。

4、load()方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据,而get()方法仅仅在内部缓存中进行数据查找,如果没有发现数据时则将越过二级缓存,直接调用SQL查询数据库。

 

 

 

 

1 楼 javajdbc 2010-10-11  


l:load方法(顾名思义,load的意思是‘加载’)它会搜索二级的缓存的,充分地利用二级缓存,绝对不会用sql去数据库查询,会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用时,如果没有数据不存在,就会抛出个org.hibernate.ObjectNotFoundException异常

2:get方法(顾名思义,get的意思是‘获取’),它去会搜索session缓存,如果发现存在,即从缓存中取出,并加载到缓存中;否则用sql去数据库中查询,如果数据库中都没有查到,返回null,不会抛出任何异常。 

综述:很明显方法的意义不同,使用该方法的动机是:在缓存中找不到数据时,你是否希望到数据库中查询。从这个动机来说,只要是考虑尽量减少对数据库不必要的查询。。。