QBC的六大硬伤

    技术2022-05-11  2

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

    以前用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中,取到了数据类型了。 


    最新回复(0)