请各位老大给小弟解决一个问题
请问在hibernate中hql语句查询与load和get的查询有什么区别,并切在性能上有什么差异
请问在hibernate中hql语句查询与load和get的查询有什么区别,并切在性能上有什么差异
解决方案 »
- SOS.......tomcat+jboss
- 有人用seasar+s2struts+mayaa开发的吗?
- struts 的配置文件使用说明,jstl使用说明,在哪里查?
- java byte[]转成String
- 有人介绍杭州做java的和上海的区别不?
- 请问下能不能将java对象直接存成2进制文件?在线等中
- 请问web服务集成的问题
- 出错提示:Exception occurred in target VM
- 200分 使用apache.org common项目中遇到的问题,怎样在apache.org里面提问
- JSP的实验室管理系统开发求帮助
- join us please
- 让人很郁闷的No result defined for action 错误。。。望牛人解答!!!!!!
至于延迟加载就不用我说了吧?
主要的区别有两点:
1、load()只会加载主键值(即所谓延迟加载),而get()会加载全部属性。
2、当指定的主键值不存在时,load()会抛异常,而get()返回null性能?当然是load()快了,但是get()更实用。
load()基本上只有一种用途,就是在删除时。delete()方法接收的是Object,所以你得先按主键查出该对象再将其删除,此时可使用load()来完成按主键查询,因为删除的过程中只需要用到主键值,没必要加载其它属性。
除此以外,我还没找到在项目中使用load()的理由。
除此以外,我还没找到在项目中使用load()的理由。呵呵 ,都知道主键了,这样做不可以嘛?
比如你有Person
Person person=new Person();
person.setId(id);
session.delete(person);
会有什么问题嘛,本人菜鸟,高手解答下
我只是举例说明load()的用法,没说不可以使用其它方式。就好似我说你能用脚走路,不代表你不可以用手走路。呵呵。这两种删除方式之间是有很大的区别的。
你new出来的是瞬时对象,而查出来的是持久对象。
如果你养成了你那种删除的习惯,则有可能吃点小苦头,比如在使用JPA的时候。好啦,先不说这个了。以下是回答4楼的问题:添加学员时,的确只需要班级的主键,此时用load()就够了。但是,如果将来需要对班级进行操作呢,那就必须用get()了吧?于是,同样的操作(按编号查班级),你得写两套方法。何必呢?所以,建议就使用get()查班级,如果一定要考虑性能问题,配个二级缓存就够了。
我想说的都被老师说了!~!
因为都是老师教给我的!~!
呵呵!~!
我要补充的就是在hibernate的书上有详细的介绍
《Hibernate开发及整合应用大全》,我已经看完了!~!挺好的!~!呵呵