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

hibernate查询语言?

发布网友 发布时间:2022-04-14 17:54

我来回答

2个回答

懂视网 时间:2022-04-14 22:15

hql中不能写count(1)可以写count(a.id)里面写具体的属性 String hql=select new com.haiyisoft.vo.entity.cc.repo.BusinessStat( r.paramName ,t.paramName , + (select nvl(count(1),0) + from com.haiyisoft.entity.cc.busi.Business b,com.haiyisoft.enti

hql中不能写count(1)可以写count(a.id)里面写具体的属性

String hql="select new com.haiyisoft.vo.entity.cc.repo.BusinessStat( r.paramName ,t.paramName , "
+" (select nvl(count(1),0) "
+" from com.haiyisoft.entity.cc.busi.Business b,com.haiyisoft.entity.cc.busi.Application a,com.haiyisoft.entity.cc.busi.Channel c "
+" where b.applicationId=a.id and a.appChannel=c.id "
+" and b.servTime>=to_date('" + bgTime + "','yyyy-mm-dd HH24:mi:ss')"
+" and b.servTime<=to_date('" + edTime + "','yyyy-mm-dd HH24:mi:ss')"
+" and c.channelCode=r.paramCode and substr(b.busiType,0,2)=t.paramCode) as businum)"
+" from "
+" ExtendParamValue r,"
+" ExtendParamValue t"
+" where "
+" r.dimension='CC_CHANNEL_CODE'"
+" and t.dimension='CC_BUSI_TYPE' "
+" and length(t.paramCode)=2"
+" order by r.paramCode,t.paramCode";

一开始写成count(1) 一直出不认识1,一直没在意,整了半天以为别的地方写错了,最后把count(1)变成count(a.id)可以了

热心网友 时间:2022-04-14 19:23

1 .from

1.1单表查询

from eg.cat as cat.其中,cat只是一个别名,为了用其他子语句的时候书写简单

1.2多表查询

from eg.Cat,eg.Dog
from eg.Cat as cat,eg.Dog as dog
2 join相关
(inner) join
left (outer) join
right (outer) join
full join
HQL同样对SQL中的这些特性支持
下面插播一个小话题,关于上边的那些特性,我一直都没怎么用,今天既然说到这里,就想
把上边的几个特性的用法说一下,也算对自己的一个补充:
假设有两个表:部门、员工,下面列举一些数据:
员工(Employee):
ID Name DepNo
001 Jplateau 01
002 Jony 01
003 Camel 02
部门(Department):
ID Name
01 研发部
02 营销部

在Hibernate中我们操纵的都是对象,所以我们操纵的是部门类和员工类
1).(inner) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee join Department as department on employee.DepNo=
department.ID (注意到条件语句我用on 没有用where)
那么执行结果是什么呢?
id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 研发部
002 Jony 01 研发部

2).left (outer) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee left join Department as department on employee.DepNo=
department.ID
那么执行结果又该是什么呢?
id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 研发部
002 Jony 01 研发部
003 Camel null null
{就是说此时我要已第一个表的记录多少为准,第二个表中没有相应纪录的时候填充null}
3). right (outer) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee right join Department as department on employee.DepNo=
department.ID
那么执行结果又该是什么呢?
id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 研发部
002 Jony 01 研发部
null null 02 营销部
{就是说此时我要已第二个表的记录多少为准,第一个表中没有相应纪录的时候填充null}

3 大小写敏感

4。select语句
就是要确定你要从查询中返回哪些对象或者哪些对象的属性。写几个例子吧:
select employee form Employee as employee
select employee form Employee as employee where employee.Name like 'J%'
select employee.Name form Employee as employee where employee.Name like 'J%'
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee right join Department as department on employee.DepNo=
department.ID

select elements(employee.Name) from Employee as employee
(不明白elements到底是做什么用的?望给于说明)
等等
5。数学函数
JDO目前好像还不支持此类特性。
avg(...), sum(...), min(...), max(...)

count(*)

count(...), count(distinct ...), count(all...)

其用法和SQL基本相同

select distinct employee.name from Employee as employee
select count(distinct employee.name),count(employee) from Employee as employee

6。polymorphism (暂时不知道如何解释?)
from com.test.Animal as animal
不光得到所有Animal得实例,而且可以得到所有Animal的子类(如果我们定义了一个子类Cat)
一个比较极端的例子
from java.lang.Object as o
可以得到所有持久类的实例

7。where语句
定义查询语句的条件,举几个例子吧:
from Employee as employee where employee.Name='Jplateau'
from Employee as employee where employee.Name like 'J%'
from Employee as employee where employee.Name like '%u'
在where语句中“=”不光可以比较对象的属性,也可以比较对象,如:
select animal from com.test.Animal as animal where animal.name=dog

8。表达式

在SQL语句中大部分的表达式在HQL中都可以使用:
mathematical operators +, -, *, /

binary comparison operators =, >=, <=, <>, !=, like

logical operations and, or, not

string concatenation ||

SQL scalar functions like upper() and lower()

Parentheses ( ) indicate grouping

in, between, is null

JDBC IN parameters ?

named parameters :name, :start_date, :x1 (这种应该是另一种"?"的变通解决方法)

SQL literals 'foo', 69, '1970-01-01 10:00:01.0'

Java public static final constants eg.Color.TABBY

其他不必解释了,在这里我只想对查询中的参数问题说明一下:
大家知道在SQL中进行传递参数进行查询的时候,我们通常用PreparedStatement,在语句中写一大堆的“?”,
在hql中也可以用这种方法,如:
List mates = sess.find(
"select employee.name from Employee as employee " +
"where employee.Name=? ",
name,
Hibernate.STRING
);
(说明:上面利用Session里的find方法,在hibernate的api Session中重载了很多find方法,它可以满足你多种形式的查询)
上边是一个参数的情形,这种情况下紧接着引入参数和定义参数的类型,当为多个参数,调用另一个find方法,它的后两个
参数都是数组的形式。

还有另外一种方法来解决上边的问题,JDO也有这样的方法,不过和hibernate的表现形式上有差别,但他们两个骨子里却是
一样的,如:
Query q = sess.createQuery("select employee.name from Employee as employee where employee.Name=:name");
q.setString("name", "Jplateau");
//当有多个参数的时候在此逐一定义
Iterator employees = q.iterate();

9。order 语句
和sql语句没什么差别,如:
select employee.name from Employee as employee where employee.Name like 'J%' order by employee.ID desc (或者asc)

10。group by 语句
同样和sql语句没什么差别,如:

select employee.name,employee.DepNo from Employee as employee group by employee.DepNo

select foo.id, avg( elements(foo.names) ), max( indices(foo.names) ) from eg.Foo foo group by foo.id
{Note: You may use the elements and indices constructs inside a select clause, even on databases with no subselects.}
谁帮我解释一下上边两句,谢过!

11。子查询
hibernate同样支持子查询,写几个例子:

from eg.Cat as fatcat where fatcat.weight > ( select avg(cat.weight) from eg.DomesticCat cat )

参考资料:http://dev.csdn.net/author/HuDon/6f122f72e6bb4db88f6a793ef96ee7c0.html

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机puik什么意思 广东江南理工高级技工学校地址在哪里 广州市技师学院具体地址 广州市高级技工学校江高校区有什么专业 广州市高级技工学校学校地址 话费支付是什么意思? 2019年华为保值机型排行:P40系列保值预计如何? 鸦片战争的二号元凶:威廉·嘉道理 局域网内访问共享要密码 Win10怎么设置局域网共享密码访问 冂周公解梦2345解梦网 广发信用卡被限额怎么办? 玉米播种机最新款有哪些,价格 投资公司主要做什么? 教学方法与教学策略区别和联系 教学模式与教学方法,教学策略有什么区别 教学方式与教学方法有什么区别 数学教学方法与教学手段有何区别 谁知道教学手段与教学方法的区别 教学手段、教学方法、教学资源都是什么?区别是什么? 教育方式和教育手段,都有什么区别? 教学方式和教学手段的区别 教学方式和教学方法有什么区别 华硕笔记本F442U到哪里面去查看配置? 华硕f442u笔记本CD盘怎么打开 华硕笔记本X32U怎么用U启动重装系统。开机时U启动没有任何反应。 华硕笔记本fl5900u怎么设置u盘启动? 邸姓的介绍 DAXHA 是什么意思 能帮忙翻译一下 华硕f454l如何设置u盘启动,再用U盘装正版win10系统 梦见铁公鸡-梦见铁公鸡是什么意思-周公解梦梦见铁公鸡-2345周公解梦大全 质量问题退货运费谁出 梦见两口子拌嘴-梦见两口子拌嘴是什么意思-周公解梦梦见两口子拌嘴-2345周公 梦见大合影-梦见大合影是什么意思-周公解梦梦见大合影-2345周公 南瓜花菜和肉加火腿肠能一起吃吗 怀孕38周牙齿痛吃西洋参可以吗? 华为手机自带输入法中文26键上面一排数字怎么调出来? 南瓜花和火腿肠西红柿鸭蛋煮面可以一起吃吗 怀孕能吃西洋参煲汤吗 集团v网退订了有影响么 国内哪个相亲网站比较好,免费的哦 如果忘记了和密码,那怎么登录呢 相亲网的网站优势 我只有,没有手机号码也忘记密码了,请问微信该怎么登录? 液晶显示器一黑一亮的问题!! 液晶显示器一黑一亮 看电影,液晶显示器一黑一亮 电脑显示器总是一黑一亮的总是闪是怎么回事,换个别的显示器就好了呢,是不是显示器坏了呀,怎么弄啊 液晶显示器一会亮,一会变黑,指示灯也跟着闪烁,什么原因啊。 我家的电脑液晶显示器温度一高就会一黑一亮的,请问是怎么回事啊