hibernate中,通过HQL进行多表连接查询返回结果集,例如同时返回了主表对象和从表对象,我的

hibernate中,通过HQL进行多表连接查询返回结果集,例如同时返回了主表对象和从表对象,我的问题是能否直接从主表对象引用从表对象的属性,如果不能那该怎么把匹配的主外键的对象的属性联系起来?谢谢。

完全是可以的,hibernate映射文件配置主表、从表的关系,比如A是主表,B是从表,则在A的映射文件中配置<many-to-one name="" class="B" lazy="false"> 注意,此处必须的是lazy="false",即在查询主表的同时查询出从表,这样你在引用主表对象的时候,你可以a.b.B表的属性即可。追问

感觉不对。

a.b.B 中的b是什么

many to one 这种映射 好像主表直接把从表的字段加入自己的表中吧。您如果试验没错的话,请截图或复制关键部分给我。

追答

a为A的对象,b为B表在a中的实体类,B为B表中B的一个字段。比如这样跟你说吧,一个学生类S(sid,sname,tid),一个教师类T(tid,tname);你在写学生来实体的时候写priavate String sid;private String sname,private T t;//--get/set--
配置

如果你需要通过学生类S引用教师类T中的tname,你只许s.getT().getTname();再不懂我也没法了!!!

追问

那你这用s.get....也是从表对象引用主表啊。我说的是主表对象引用从表。

追答

get不就可以拿到从表的信息么?

追问

我上上个追问是错的。。然后你的例子是对的,是单向n-1映射。如果由1端引用n端的数据,必须在1端也就是老师的类里包含一条set类型的属性。并在老师的xml中配置 里的 class student 这样。就可以通过 t.某个学生对象.get属性 的方法来获得从表对象属性了。我说的对不。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
您好,如果你的主表javabean有子表的属性,然后在XML映射了该属性,
那么可以直接从主表对象引用从表对象的属性,
Hibernate对这种映射默认都是懒加载的,你开始查询主表对象的时候,从sql上就可以看出来不会去查询子表,
当你使用主表对象上面的从表对象的时候,Hibernate才用left out join的方式查询子表。
希望对你有帮助。追问

a是主表对象,包含了一个set 类型的从表对象,怎么用a去引用每一个从表对象的属性,怎么个写法?

追答

这个没办法的,你获取a对象的那个set集合,然后可以迭代获取到每个从对象。

追问

用a引用每一个从表对象的属性的话,left out join 还得

还得再执行一次hql吗? 是系统自己执行的吗。

追答

Hibernate执行,不用你人为的去干预。

追问

如果用,lazy=fasle.那是不是就不用多执行一句从表查询了?

追答

对的,如果这样,你查询主表的时候,hibernate就会关联查询出子表对象。
至于是否需要懒加载,你可以根据你的需求去配置。

追问

哦。soga

本回答被提问者采纳
第2个回答  2013-10-18
现在假设A是主表B是从表,写HQL的时候可以这样写select A.A表生成的类中的外键名.B表的字段名 from A
A表生成的类中的外键名一般是B表的名称,这样的话就可以把B表你要的任何字段都搜出来了。
594266756那位的方法也可以,我这个方法不用改配置文件,他的方法如果你要取的是ID的话也不用改lazy="false"追问

.主表会配置它的外键吗? 那岂不成了从表。

追答

sorry,失误
A是从表B是主表

追问

如此严重的失误坑爹啊。

a.a外键.b 的用法是隐式连接吗? 从逻辑上说,你要是想返回一个b表字段。并且已知a的外键。何不直接拿此外键直接搜索b表呢?

追答

知道外键名和主表的字段值,并不知道外键的值啊!

追问

我感觉你误导我了。因为你的hql句子没有加where。所以返回结果是所有的b表的某个字段。这就等于直接在b表搜索此字段就行了。我说的对吗?

追答

是的

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网