Hibernate 中 get和load方法的区别
hibernate 支持延迟加载,也称为懒加载,就是在使用对象的时候才会发送 sql 语句,不使用对象的时候就不会发送 sql 语句。 只有在 session 打开状态下,懒加载才有效。 一、 get 和 load 在懒加载方面的区别 get 对持久类本身,不支持懒加载, 直接载入实体类。 load 对持久类本身,支持懒加载, 直接载入实体类。 get 和 load ,对其关系属性( many-to-one , one-to-one 属性) 都支持懒加载 二、 get 和 load 在查询持久类本身的机制区别 1 、 get 和 load 方法都是根据 id 去获得对应数据的,但是获得机制不同 : get 方法 , hibernate 会去确认该 id 对应的数据是否存在,它首先会去 session 中去查询 (session 缓存其实就 hibernate 的一级缓存 ) ,如果没有,再去二级缓存中去查询,如果再没有,就去数据库中查询,仍然没有找到的话,就返回 null 而使用load 方法的话 , hibernate 会认定该 id 对应的数据一定存在,它也会先去 session 缓存中去查找,如果没有找到, hibernate 会根据 lazy 属性值来确定是否使用延迟加载。如果 lazy=‘true’ ,就使用延迟加载,返回该代理对象