首页  

hibernate Session get()和load()方法区别     所属分类 hibernate 浏览量 565
org.hibernate.Session

Object get(String entityName, Serializable id)
Object get(String entityName, Serializable id, LockMode lockMode)

Object load(String entityName, Serializable id);
Object load(String entityName, Serializable id, LockOptions lockOptions)

get  调用后立即向数据库发出sql语句(不考虑缓存的情况下),返回持久化对象
load 调用后返回一个代理对象,该代理对象只保存了实体对象的id,使用对象的非主键属性时才会发出sql语句

数据不存在时,get方法返回null,load方法抛异常 org.hibernate.ObjectNotFoundException

关于延迟加载和缓存

hibernate3 后默认启用延迟加载 lazy=true
get方法不使用延迟加载机制,首先查找 Session缓存,然后查找 二级缓存,然后查找数据库 
load方法首先查找 Session缓存,然后查找 二级缓存,若找不到则返回代理对象,使用对象非主键属性时才发出sql语句加载对象
若设置lazy 为 false ,load返回代理对象之后会发出sql语句,记录不存在,抛出ObjectNotFoundException异常

上一篇     下一篇
Spring中的设计模式

设计模式之Facade

Java Files 常用方法

hibernate5.3 tutorials

hibernate5 主键生成策略

windows使用技巧