QBC的六大硬伤

本文探讨了Hibernate Query By Criteria (QBC) 和 Hibernate Query Language (HQL) 的区别,重点介绍了QBC在关联查询方面的局限性,并指出HQL虽然需要指定数据类型,但在灵活性上更具优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“硬伤”系列已经是炒得烂熟了,所以取这样的名字也是有点怕怕;不过在行业内混了几年,最近看花前柳下的文章少了,发现竟然取不出更好的名字,将就吧,呵呵。

以前用HQL比QBC多,网上都说QBC功能比HQL少,我也一直有这个感觉,但是从来没有总结过:QBC到底比HQL差在哪里呢?最近实现DAS标准,终于“全面”总结了一把。


1)一定要在HBM中有关联,才能用到关联的对象的属性。如果没有关联,就只能用本对象的简单属性。
如果A和B对象没有关联,是不能一起查询的。HQL就没有这个缺点。
2)如果有projection,关联一定要取别名。
3)别名一定不能和 HBM配置的关联属性名称相同。说起来也有道理,为什么要取个和自己名称相同的别
名呢?但是....为什么就不可以呢?
4)如果主对象和从对象的有相同的属性,那么在criterion中,使用主对象可以直接写属性名称,使用从
对象一定要用 关联的属性的别名(用原名是不可以的哦)。
5)如果主对象和从对象的有相同的属性,那么在projection中,使用主对象可以直接写属性名称,使用
从对象一定要用 关联的属性的别名(用原名是不可以的哦)。
6)如果主对象和从对象的有相同的属性,那么在order中,使用主对象可以直接写属性名称,使用从对象
一定要用 关联的属性的别名(用原名是不可以的哦)。

呵呵,不用怀疑,说的就是hibernate的最新的3.2版的QBC。不过HQL也有个比较严重的问题:必须传入数据类型;还好的是,我们已经从sessionFactory的cache中,取到了数据类型了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值