1 get的方法不支持lazy加载,而load方法默认情况下支持lazy(采用了CGLIB代理的方式)
2 get加载数据的时候,数据部存在返回null,而load方法返回ObjectNotFoundException 异常
另外: Hibernate 在提交事务的时候,会有一个flush()的操作,检查当前内存中数据的改动,会相应的生成sql语句。 比如:
Session session = factory.openSession(); session.beginTransaction(); User user = new User(); user.setName("张三"); session.save(user); user.setName("李四"); session.getTransaction().commit();ps: 这样子的语句,实在发送了两条sql语句,在调用save()方法的时候产生一条insert语句,在commit()的时候,对比内存变动后,又产生一条update()语句。
3:由于load默认采用延迟加载,所以返回的结果是一个代理类,所以不支持多态查询。而get方法则支持多态查询。除非在建映射表的时候,把class标签里的lazy属性设置为false,那么load就能支持多态查询了。ps:另外通过hql语句查询也支持多态查询。