关于hibernate 联级查询数据的问题

我有一个系统,有级联操作,比如我一进入系统就要查询出当前登录的教师教了哪些年级,然后通过获取选择的年级再查询班级,然后根据班级再查询学生。有什么好的方法,优化sql,就是... 我有一个系统,有级联操作,比如我一进入系统就要查询出当前登录的教师教了哪些年级,然后通过获取选择的年级再查询班级,然后根据班级再查询学生。有什么好的方法,优化sql,就是能够把每次查询的数据能够保存起来,然后提供给下一次查询,缩减范围。项目框架式 spring +hibernate +easyui 展开
 我来答
stefwujj
2013-10-25 · TA获得超过417个赞
知道小有建树答主
回答量:141
采纳率:100%
帮助的人:208万
展开全部
1,这个不叫级联操作,最多叫做关系关联查询;
2,优化的本质就是减少SQL,在你这个关系中,至少4个表有关联关系,所以,在查询教师的时候,使用LEFT JOIN FETCH把年级,班级和学生查询出来:
SELECT s FROM Teacher t LEFT JOIN FETCH t.grade g LEFT JOIN FETCH g.classes c LEFT JOIN FETCH c.students s WHERE t.id = ?
3,这样的查询性能还是不算太高,毕竟4个对象关联,不算中间表,所以,建议直接teacher对象里面增加一个student的关系,直接保存教师教授的学生;
4,如果教师和学生关系固定,也可以使用查询缓存,查询缓存在我个人说明里面有相关的资料,你可以看看。
希望对你有点用处。
追问
hibernate  级联查询与左联接等查询方式有什么区别
追答
这个可能是我比较抠字眼了,
级联:cascade,只代表save-update/delete/all/delete-orphan/all-delete-orphan这几个级练操作;

而你说的级联查询,我的理解是不是就是直接
SELECT a.b.c.d这种;
就是在HQL中,如果你直接使用“.”来导航关系的话,相当于JOIN(内联),当然和LEFT JOIN有区别,而且我这里写的LEFT JOIN FETCH代表的不仅仅是左联查询,这个是迫切左联,意思是你把Teacher查询出来,对应的student也都查询出来了。不会再延迟加载了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式