请各位老大给小弟解决一个问题
   请问在hibernate中hql语句查询与load和get的查询有什么区别,并切在性能上有什么差异 

解决方案 »

  1.   

    load有延迟加载,Get没有
      至于延迟加载就不用我说了吧?
      

  2.   


    主要的区别有两点:
    1、load()只会加载主键值(即所谓延迟加载),而get()会加载全部属性。
    2、当指定的主键值不存在时,load()会抛异常,而get()返回null性能?当然是load()快了,但是get()更实用。
    load()基本上只有一种用途,就是在删除时。delete()方法接收的是Object,所以你得先按主键查出该对象再将其删除,此时可使用load()来完成按主键查询,因为删除的过程中只需要用到主键值,没必要加载其它属性。
    除此以外,我还没找到在项目中使用load()的理由。
      

  3.   

    load()基本上只有一种用途,就是在删除时。delete()方法接收的是Object,所以你得先按主键查出该对象再将其删除,此时可使用load()来完成按主键查询,因为删除的过程中只需要用到主键值,没必要加载其它属性。 
    除此以外,我还没找到在项目中使用load()的理由。呵呵 ,都知道主键了,这样做不可以嘛?
    比如你有Person
    Person person=new Person();
    person.setId(id);
    session.delete(person);
    会有什么问题嘛,本人菜鸟,高手解答下
      

  4.   


    我只是举例说明load()的用法,没说不可以使用其它方式。就好似我说你能用脚走路,不代表你不可以用手走路。呵呵。这两种删除方式之间是有很大的区别的。
    你new出来的是瞬时对象,而查出来的是持久对象。
    如果你养成了你那种删除的习惯,则有可能吃点小苦头,比如在使用JPA的时候。好啦,先不说这个了。以下是回答4楼的问题:添加学员时,的确只需要班级的主键,此时用load()就够了。但是,如果将来需要对班级进行操作呢,那就必须用get()了吧?于是,同样的操作(按编号查班级),你得写两套方法。何必呢?所以,建议就使用get()查班级,如果一定要考虑性能问题,配个二级缓存就够了。
      

  5.   


    我想说的都被老师说了!~!
    因为都是老师教给我的!~!
    呵呵!~!
    我要补充的就是在hibernate的书上有详细的介绍
    《Hibernate开发及整合应用大全》,我已经看完了!~!挺好的!~!呵呵