本文共 704 字,大约阅读时间需要 2 分钟。
lazy是Session获取数据的方式之一(另一种就是eager)。
在Session上下文之外,如果尝试直接访问被设置为lazy加载的关联数据,则应用将会抛出异常。
1. 关联数据的获取方式:
- join,在一个select语句中,通过outer join获取关联的实例或集合
非lazy加载,无论关联的实例或集合是否被用到,都加载
- batch,在一个select语句中,通过一组主键或外键获取实例或集合
配置hibernate.default_batch_fetch_size参数
- select,需要的时候,在第二个select语句中获取一个实例(通过第一个select语句获得)所关联的实例或集合
支持lazy加载
- subselect,需要的时候,在第二个select语句中获取全部实例(通过第一个select语句获得)所关联的实例或集合
支持lazy加载
2. 关联数据的获取时机:
- Immediate fetching,立刻加载关联的实例或集合
- Lazy collection fetching,只针对集合,默认方式,需要的时候加载整个集合
- "Extra-lazy" collection fetching,只针对集合,只加载集合中需要的实例
- Lazy proxy fetching,针对实例的属性,默认方式,需要访问实例的一个非标识符属性时,只获取关联实例的该属性值
被访问的属性是标识符时,获取关联实例
- Lazy "no-proxy" fetching(不推荐),针对实例的属性,需要编译时增强字节码
- Lazy attribute fetching(不推荐),针对实例的属性,需要编译时增强字节码
转载地址:http://uslai.baihongyu.com/