Session 中的load和get方法的一些问题。

s是一个Session

Account acct = (Account)s.load(Account.class, new Long(720896));

acct = (Account)s.get(Account.class, new Long(720896));

执行这两句话是,会不会访问数据库?

get 会查询缓存如果缓存没有的话会查询数据库。load 返回一个代理对象,在使用的时候查询缓存,如果没有查询库

执行load()时,先从Session查找当前的对象是否存在,如果不存在,则从数据库中去查询,如果不存在这条记录,则扔异常;
执行get()的时候,不论Session中是否存在当前对象,直接从数据库中去查询,如果不存在,则返回null。

如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。
Load方法可返回实体的代理类实例,而get方法永远直接返回实体类。
load方法可以充分利用内部缓存和二级缓存中的现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据读取。

[quote]get 会查询缓存如果缓存没有的话会查询数据库。load 返回一个代理对象,在使用的时候查询缓存,如果没有查询库[/quote]

楼上正解! 另外二者的报错也不太!其他没什么大区别