hibernate中,通过HQL进行多表连接查询返回结果集,例如同时返回了主表对象和从表对象,我的问题是能否直接从主表对象引用从表对象的属性,如果不能那该怎么把匹配的主外键的对象的属性联系起来?谢谢。
感觉不对。
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属性 的方法来获得从表对象属性了。我说的对不。
那么可以直接从主表对象引用从表对象的属性,
Hibernate对这种映射默认都是懒加载的,你开始查询主表对象的时候,从sql上就可以看出来不会去查询子表,
当你使用主表对象上面的从表对象的时候,Hibernate才用left out join的方式查询子表。
希望对你有帮助。追问
a是主表对象,包含了一个set 类型的从表对象,怎么用a去引用每一个从表对象的属性,怎么个写法?
追答这个没办法的,你获取a对象的那个set集合,然后可以迭代获取到每个从对象。
追问用a引用每一个从表对象的属性的话,left out join 还得
还得再执行一次hql吗? 是系统自己执行的吗。
追答Hibernate执行,不用你人为的去干预。
追问如果用,lazy=fasle.那是不是就不用多执行一句从表查询了?
追答对的,如果这样,你查询主表的时候,hibernate就会关联查询出子表对象。
至于是否需要懒加载,你可以根据你的需求去配置。
哦。soga
本回答被提问者采纳A表生成的类中的外键名一般是B表的名称,这样的话就可以把B表你要的任何字段都搜出来了。
594266756那位的方法也可以,我这个方法不用改配置文件,他的方法如果你要取的是ID的话也不用改lazy="false"追问
.主表会配置它的外键吗? 那岂不成了从表。
追答sorry,失误
A是从表B是主表
如此严重的失误坑爹啊。
a.a外键.b 的用法是隐式连接吗? 从逻辑上说,你要是想返回一个b表字段。并且已知a的外键。何不直接拿此外键直接搜索b表呢?
追答知道外键名和主表的字段值,并不知道外键的值啊!
追问我感觉你误导我了。因为你的hql句子没有加where。所以返回结果是所有的b表的某个字段。这就等于直接在b表搜索此字段就行了。我说的对吗?
追答是的