hibernate优化

1.当一对多关系的时候,由于在保存one方的时候级联保存many方,并且one方负责维护关联关系的话,那么sql的执行顺序是,先保存many方(此时many方的外键是没有值的),然后保存one方,最后将many方的外键改为保存的one的主键这样效率就低了。但是如果由many方来维护关联关系,那么就可以少执行那句update语句了。(首先保存one方,再保存many方,many方在保存自己的时候直接就把外键给设置上了,所以不需要进行update语句来设置外键了)

2.当多对多关系的时候,例如将一个学生,和多门课程关联起来。这时候,操作学生端会效率高一点,因为是由学生端.getCourse().add(course1)和学生端.getCourse().add(course2)来建立关系,这样的话学生端.getCourse()虽然执行了两次,但是由于缓存关系,真正与数据库只交互了一次查询操作。而如果用课程1.getStudent().add(stu1)和

课程2.getStudent().add(stu1)这样的话,他们获取的是各自的学生集合,所以与数据库的查询操作交互了两次。这样效率就低了。


3.user(用户表)和post(岗位表)是一对多   user(用户表)和department(部门表)是多对多  

这时需要查询每一个用户所在的岗位和部门以及用户的自身信息,如果单纯用from user的hql语句查询,则实际会发生3条sql语句,分别是查询user,查询user的post,查询user的department语句。这样做效率很低。我们可以用迫切左外连接来提高效率(不要忘记加fetch,因为不加的话hql查询出来的结果是Object集合,加了的话才会变成对象集合),这时只用一句sql语句就能完成查询三张表所有信息的操作了。查询出来的数据如果重复的话,可以将它放在set集合去重。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值