关于低版本的hibernate查询产生非常多的sql问题

本文对比了低版本Hibernate在多表关联查询时存在的问题及执行效率低下的情况,并介绍了高版本Hibernate如何通过单条SQL语句实现原先多条SQL语句才能完成的查询任务。

1:低版本的hibernate,多表关联查询,比如一个以航司的订单表order,航段表flight,乘机人表passenger为例,订单表和航段表一对多关系,订单表和乘机人也是一对多关系。

通过id去查询订单表,那么将执行3条sql语句。

select * from order where id='order1';

select * from flight where orderId='order1';

select * from passenger where orderId='order1';

2:其实通过id去查询并不会有什么大问题。但是如果是查询订单list,分页查询,或者整表查询,问题就来了。

假设order表中有3个订单,id分别是order1,order2,order3,那么hibernate将执行7条sql语句

select * from order;

select * from flight where orderId='order1';

select * from passenger where orderId='order1';

select * from flight where orderId='order2';

select * from passenger where orderId='order2';

select * from flight where orderId='order3';

select * from passenger where orderId='order3';

3:上面的问题在低版本(hibernate3.0属于这种低版本)中也有处理方式,就是用懒加载lazy,当然这样是不科学的,因为我们并不希望懒加载,我们就是要级联查询出数据出来。另外低版本也可以自己写sql,但是这样违背了面向对象编程。

4:hibernate高版本修复了这个问题,高版本是这样处理的。

selcet * from order left join flight on order.id=flight.orderId left join passenger on order.id=passenger.orderId;

一条sql语句搞定7条sql语句.

5:这件事告诉我们,要多去看看新版本的软件的功能,说不定就修复了以前做的很烂的功能。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值