find,iterator
(1)iterator首先会获取符合条件的记录的id,再跟据id在本地缓存中查找数据,查找不到的再在数据库中查找,结果再存在缓存中。N+1条SQL。
(2)find跟据生成的sql语句,直接访问数据库,查到的数据存在缓存中,一条sql。
如果找不到符合条件的纪录,get()方法将返回null.
如果找不到符合条件的纪录,find()方法将返回null.
如果找不到符合条件的纪录,load()将会报出ObjectNotFoundEcception.
get()方法会忽略二级缓存,若内部缓存没有查询到会到数据库中去查询 .
find()方法会忽略二级缓存,若内部缓存没有查询到会到数据库中去查询 .
load()方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据 .
get()方法返回真实的实体类 .
find()方法返回真实的实体类 .
load()方法可以返回实体的代理类 .
load()会因所要查询的对象类的映射文件中设置的检索策略,而实现立即检索或延迟检索。
get()方法和find()方法却不受这种控制,它们总是会执行立即检索。
那么get与find的区别在哪?我们就不讨论了,在以后的版本中find方法就消失了