软讯网络 > 编程语言 > Java > hibernate 关联查询的一些小经验
【标 题】:hibernate 关联查询的一些小经验
【关键字】:
hibernate
【来 源】:http://blog.csdn.net/zhanghandong/archive/2006/11/15/1385315.aspx
hibernate 关联查询的一些小经验
昨天和朋友讨论一晚上的结果,共同解决一个问题.关联查询.<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页).可以使用这个节点在同一个配置文件里映射层次分明清晰的父子关系.