get()
----不支持LAZY
当调用上面的方法时,马上发出查询sql,加载User对象
persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
采用get加载数据,如果数据库中不存在相应的数据,返回null,它不会抛异常
load()----支持LAZY
不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载)
hibernate延迟加载实现原理是代理方式
延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句)
persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
综 上所述,使用load和使用get方法都是可以找到相应的对象的,但发出sql语句的时机不一样,get是在调用get方法时就会发出sql语句,而 load在调用load方法时并不会发出sql语句,只有在调用该查询出来的对象的属性时才会发出sql语句,而当找不到结果时,get得出的结果是 null,但并不会抛异常,load则会抛出异常
- User user = (User)session.get(User.class, "402880d01b9bf210011b9bf2a2ff0001");
- user.setName("龙哥");
- User user = (User)session.get(User.class, "asdfsafsdfdsf");
- System.out.println("user.name=" + user.getName());
load()----支持LAZY
- User user = (User)session.load(User.class, "402880d01b9bf210011b9bf2a2ff0001");
hibernate延迟加载实现原理是代理方式
- System.out.println("user.name=" + user.getName());
延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句)
- user.setName("发哥");
- User user = (User)session.load(User.class, "55555555");
- System.out.println("user.name=" + user.getName());
- //采用load加载数据,如果数据库中没有相应的数据
- //那么抛出ObjectNotFoundException