关于hibernate 联级查询数据的问题
我有一个系统,有级联操作,比如我一进入系统就要查询出当前登录的教师教了哪些年级,然后通过获取选择的年级再查询班级,然后根据班级再查询学生。有什么好的方法,优化sql,就是...
我有一个系统,有级联操作,比如我一进入系统就要查询出当前登录的教师教了哪些年级,然后通过获取选择的年级再查询班级,然后根据班级再查询学生。有什么好的方法,优化sql,就是能够把每次查询的数据能够保存起来,然后提供给下一次查询,缩减范围。项目框架式 spring +hibernate +easyui
展开
展开全部
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,如果教师和学生关系固定,也可以使用查询缓存,查询缓存在我个人说明里面有相关的资料,你可以看看。
希望对你有点用处。
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也都查询出来了。不会再延迟加载了。
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询