hibernate 关联查询的一些小经验

本文通过实际案例,探讨了解决Hibernate框架中关联查询时遇到的Nocollectionfound异常的方法。通过对配置文件的调整,将fetch属性由select更改为join,成功解决了异常问题。
昨天和朋友讨论一晚上的结果,共同解决一个问题.关联查询.
<many-to-one name="billtypeTable" class="com.shop.billboard.DAO.BilltypeTable" fetch="select">
            <column name="typeid" />
</many-to-one> 
然后进行测试的时候,报了异常:
No collection found.
看到collection,我就想到是配置文件出错了,因为配置文件里配置的就是关联关系.然后就去找配置文件的问题,结果找到了如下问题:
(思路不知道对否,以后看到这个异常就找配置文件,我是这么理解的)
刚开始 fetch="select",肯定不能进行关联了,因为fetch="select"就是等同于outer-join="true"
fetch为可选属性.默认为join.
所以只要把fetch改为"join"就可以了.
对于hql语句:
<set name="billboardTables" inverse="true">
            <key  column name="typeid" />
            <one-to-many class="com.shop.billboard.DAO.BillboardTable" />
< /set>
这段配置实际上是把对应的sql语句(select a.id , a.name , a.url , a.message ,    p.name   FROM Billboard_Table AS a INNER JOIN Billtype_Table AS p ON a.typeid = p.id)中红色部分配置了,然后我们就可以写hql语句:
from BilltypeTable type right join type.billboardTables

注意:hql是面向对象的查询语言.不能和sql等同.

但是最终有个问题没有解决:参看官方文档,我们在改fetch属性之前,在配置文件里加了<join>节点,但不知道为什么,配置文件里出现了一个大红X...不识别<join>节点.还没有仔细考虑过这个问题.

P.S.朋友的父子关系配置文件使用了两个,父表映射一个文件,子表又映射一个文件.然后就发现了joined-subclass这个节点(深入浅出hibernate第140页).可以使用这个节点在同一个配置文件里映射层次分明清晰的父子关系.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值