昨天和朋友讨论一晚上的结果,共同解决一个问题.关联查询.
<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页).可以使用这个节点在同一个配置文件里映射层次分明清晰的父子关系.
<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页).可以使用这个节点在同一个配置文件里映射层次分明清晰的父子关系.
本文通过实际案例,探讨了解决Hibernate框架中关联查询时遇到的Nocollectionfound异常的方法。通过对配置文件的调整,将fetch属性由select更改为join,成功解决了异常问题。

1616

被折叠的 条评论
为什么被折叠?



