来源:牛客网
- 定义:延迟加载(lazy load)是Hibernate3 关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的。就是只有当真正需要数据时,才真正的执行数据加载操作。延迟加载是 hibernate 中用于提高查询效率的一种措施,它的对立面是 立即加载。
- Hibernate 2 实现延迟加载有 2 种方式:
- 实体对象
- 集合
- Hibernate 3 又引入了一种新的加载方式:属性的延迟加载
- 一般使用load()的方法来实现延迟加载:
- 当调用load方法加载对象时,返回代理对象,等到真正用到对象的内容时才发出sql语句
- Hibernate 使用 Java 反射机制,而不是字节码增强程序来实现透明性
- Hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
- 1.尽量使用多对一,避免使用单项一对多
- 2.灵活使用单向一对多
- 3.不用一对一,使用多对一代替一对一
- 4.配置对象缓存,不使用集合缓存
- 5.一对多使用Bag ,多对一使用Set
- 6.继承使用显示多态 HQL:from object polymorphism="exlicit" 避免查处所有对象
- 7.消除大表,使用二级缓存
使用单向一对多关联,不使用双向一对多
Hibernate鼓励使用双向一对多关联,不使用单向一对多关联。单向一对多关联映射是在one端维护关系的,必须先保存many端后才可以保存one端,所以在保存many端时该端不知道one端是否存在相应的数据,所以只能将维护的关系字段设置为null,如果为非空则无法保存。因为是one端维护关系,所以在保存one端时,会发出多余的update语句维护many端的外键关系。