关于Hibernate中get和load的区别

关于Hibernate中get()和load(),都是通过id取得记录信息

SysUserEntity user=(SysUserEntity)session.load(SysUserEntity.class,id);

SysUserEntity user=(SysUserEntity)session.get(SysUserEntity.class,id);

但是这俩是有区别的

 

load()方式查询不到数据,就会抛出org.hibernate.ObjectNotFoundException异常的异常

get()方式查询不到数据,就会返回null

 

load()方式比get()方式复杂,load()方式先在缓存中查询,如果该数据在缓存中,则直接返回。

如果没有则继续在数据库中查询,查到记录返回,查不到抛出异常。

get()方式直接从数据库中查询,如果该数据在缓存中,则直接返回。没有则返回null

 

根本上:

对于load()时,会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理。

id在数据库中一定有对应记录存在就可以使用load方法来实现延迟加载。

对于get()时,hibernate会确认一下该id对应的数据是否存在,

首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。

 

为什么load()的会抛异常: 使用该方法时候,认为数据库是存在该数据的,用代理来延迟加载,在使用中出现错误,就会抛异常

对于get(),查询的是真实数据,查询不到就会返回null

posted @ 2017-07-27 22:17  森さんの一生  阅读(162)  评论(0编辑  收藏  举报