问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hibernate如何做关联查询呢

发布网友 发布时间:2022-04-08 19:13

我来回答

3个回答

热心网友 时间:2022-04-08 20:42

很多人认为hibernate一旦涉及到多张表查询就很不方便,只能通过原生sql解决,其实不然,hql语句其实已经比较强大了,基本涵盖了sql的60%的功能。我认为用原生sql的场景应该为以下几点情况:
1. 非常复杂sql(嵌套、临时表、混合语句【update包含select嵌套】)
2. 某数据库(如oracle)特性函数
3. 特殊业务sql,即查询出的结果是某种特殊业务含义,并不是po实体类里的字段。例如:select col_1 as business1, col_2 as business2 from table;(business1并不是table的字段)
除以上特殊需求外,我建议能用hq就用hql,hql最大的优点,除了能自动映射成po实体类,另一个就是跨数据库的通用性,采用hql语句可以轻松将数据库由mysql改为oracle。
hql的基础我就不再叙述了,今天我为大家主要介绍多表之间的关联查询。
1. po之间含有关联关系
public class Student {
...

private Clazz clazz;

get()...
set()...
}
from Student t inner join t.clazz r where t.sex = '男' and r.name = '三班'
这个语句默认情况下,是懒加载的,如果想一并抓取,则语句为:
from Student t inner join fetch t.clazz r where t.sex = '男' and r.name = '三班'
hql同样支持left join和right join等关联查询
2. po之间没有关联关系
public class Student {
...

private String clazzId;

get()...
set()...
}
select t from Studnent t, Clazz r where t.clazzId = r.id and t.sex = '男' and r.name = '三班'
3. 查询部分字段
另外有时我们只需要查询po对象里的部分字段,那么怎么查呢?
select new Student(name, sex) from Student
但需要注意的是,Student实体类中必须要有参数为name,sex的构造函数。
4. 统计函数
支持count()、min()、max()、sum()、avg()等
select avg(s.age) from Student as s
5. 去除重复行
select distinct s.age from Student as s
6. 综合用法
举一个典型的例子:分页。用hibernate分页,现在大多数人还是采用两步去做,第一步统计行数,第二步分页查询(目的是计算出总页数),如果想一步完成,多数人还是用sql了,其实hql也能做到。
select new Student(t.name, t.sex, count(t)) from Sudent t
在Student实体类中只要有参数为name, sex, rowCount的构造函数即可,rowCount也可以不是数据库里的字段

通过以上可以看出,某一技术我们有时觉得不方便,只是我们还不够了解它,需要我们更多的仔细去探索和挖掘。

热心网友 时间:2022-04-08 22:00

这要在g.hbm.xml文件中的<class name="com.zz.domain.City" table="city" catalog="xiaoneiwang"

lazy="false"

>

里面加入lazy="false"。这是懒加载问题。当然还可以初始化代理对象。opensessioninview过滤都可以达到效果。第1种最简单。第3种最好。追问配完了延迟加载呢?

追答第1种办法。lazy="true“
第2种。采用openSessionInview。当你用的时候取消懒加载。不用的时候延迟加载。

热心网友 时间:2022-04-08 23:35

你可以写hql语句来查询 hql =select stu.g from Student stu join fetch stu.g where stu.某个属性=某个值
List list=session.createQuery(hql).list; list里面就是你要的啦g啦追问hql里的fetch是什么意思 不是只写join就行了么

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 性情沉浮不定是什么意思? 迪斯DE-F16足疗机的变压器线路板哪里能买到?? 怎么阻止打火机声音传播 求幸福的个性签名。。。 从京秦高速平家疃高速口下来到白庙办进京证,这段路程拍进京证吗? 有的打火机有声音,怎么把它弄没了? 为什么打打火机的时候都啪 的一声? 怎样打才能没声音?? 河北燕郊至北京京秦高速要进京证吗? 去机场走京秦要不要进京证 怎么才能让打火机打出活不发出声音!!! 怎么才能让打火机打出活不发出声音 怎么让打火机没有声音? 怎样消除打火机声音 打火机无声方法 电脑运行内存为何突然增加1G? win7 系统坏掉了 怎么进行修复 电脑内存占用突然变高 电脑内存怎么变大 win7系统被破坏了怎么修复 有没有那个可以和k30s配置价格匹配的? 一加8t对比红米k30pro 说一个人心性不定什么意思啊? 性格不定性的人是什么样的人 求幸福的个性签名说说 Zippo 开盖没声音了怎么调 zippo打火机 开盖不响 京秦高速天津段三条车道中型货车走中间道违法吗?徐长友 cma报考通过后2年相关工作经验怎么证明 mutable是什么意思 怎样克服性情不定的癖性 朗森打火机声音不响了,如何才能恢复? 2020外地车牌晚高峰能走京秦高速吗 下午五点钟以后可以从首都机场开回燕郊吗 算违章吗? 有什么好听又时尚的幸福个性签名。是情侣的、 LOLS6中单拉克丝新版天赋怎么加点 光辉S6天赋点法推荐 求个幸福的个性签名 adc符文s6最新通用符文怎么配 为什么我性情不定,本来是很温柔的性格,碰到点生气的事会性情大变,变成另一个我,发过脾气又会变回来, 人新版天赋怎么点 S6中单小鱼人天赋符文攻略 为什么身边的人都说我性格不定? mac pro 看电影三小时后画面和声音就一直颤抖那种卡、声音和画面都卡。什么故障呀 喷表是什么意思?