关于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