一条sql转换成Hibernate hql语句

BUG胡汉三
博客专家认证
2011-04-21 10:33:16
参与到的两张表:tbmeetroom(会议室)、Tbmeetmgr(会议记录)
其中Tbmeetroom(会议室)类中有Tbmeetmgr的一个set集合名为tbmeetmgrs。
在Tbmeetmgr(会议记录)类中有一个Tbmeetroom的对象、名为tbmeetroom。
现在要用hql语句查询(一定要用hql)Tbmeetroom表中的所有信息。
条件一为t.status <> 3 ——这个已经实现。
排序方式order by t.id desc ——这个也已经实现!
现在要加入一个条件就是ecid:首先、在Tbmeetroom表中并没有ecid字段、ecid字段在Tbmeetmgr

表中。现在以它作为条件、去查询Tbmeetroom表中的信息(并且加上huiyishi = t.id Tbmeetroom的

Id名称相同)下面是sql语句、值能查询出来! 但是、我在页面上用来Hibernate的延迟加载、所以sql

的值是出来了、但是一跳转到页面就会报错。还有我看了一下、使用Hibernate原生sql查询返回的list

集合中存储的信息是Object[]并不是对象、这是什么原因~~~另外、希望各位给说说、hql语句查询的

时候、如select u.id,u.name from Users u 这条语句、返回的是list、但是list集合里面存储的好像

是数组、还有当我只查询一个字段、或者是三个、三个以上什么的、Hibernate会返回什么类型给我。

sql语句:

select * from Tbmeetroom t where t.status <> 3 and "+ecid+" in (select ecid from

Tbmeetmgr where huiyishi = t.id) order by t.id desc


注意哈:上面的这条是sql语句、可以查询出数据来的。但是我需要把它换成hql语句、希望知道的给转

转、或者是给点思路、或者是给一个参考资源什么的都行。

...全文
393 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
BUG胡汉三 2011-04-21
  • 打赏
  • 举报
回复
终于试验过了:
1、当hql语句中只查询一个字段的时候、返回Object对象(好像是根据你的字段类型来决定返回什么类型、比如我只查询id(我的id在数据库中的类型为number、在javaBean属性文件中定义的是Long)这个时候它会返回一个Long类型):个人觉得应该是根据你的javaBean属性文件中定义的类型来决定的、如果是Long就返回Long如果是String就返回String(用javaBean对象接收list集合中的数据会报错)。

2、当hql语句中只查询两个字段、或者两个字段以上的时候、返回Object[]数组类型(这个不能用你的javaBean对象接收list集合中的数据、这样接收list中的数据就会报错。要用一个Object[]来接收。)

3、当Hibernate中使用原生态sql语句查询时(select *)返回Object[]如果将list集合中的Object[]数据转换成javaBean就会报错!(不相信的自己去试试)。


oO临时工Oo 2011-04-21
  • 打赏
  • 举报
回复
另外,实际上你的程序中Hb返回的List是一个ArrayList,数组列表,所以存储格式都用数据了,
ArrayList中数据元素的定义为:


/**
* The array buffer into which the elements of the ArrayList are stored.
* The capacity of the ArrayList is the length of this array buffer.
*/
private transient Object[] elementData;

oO临时工Oo 2011-04-21
  • 打赏
  • 举报
回复
其实楼主是不是问题就出在:你只想查询指定的字段,而这样的话就不能配对这个表所对应的类??
这样我也不知道了,如果查询的是指定的字段,比如说是N个字段,共查到M条记录,返回的List数据就是
List list = ....
list中的数据是Object [] records,长度为记录条数M
而每个记录又是一个Object [] ,Object [] record = records[i],长度为查询字段数N,

BUG胡汉三 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 trocp 的回复:]
使用Hibernate原生sql查询返回的list

集合中存储的信息是Object[]并不是对象


query.list不是返回List么,怎么会Object[]
[/Quote]
是返回的list集合、但是list集合里面存储的是Object[]
oO临时工Oo 2011-04-21
  • 打赏
  • 举报
回复
返回的List list中存的是一个对象集合,只不过集合在底层可能是用Object[] object存储的
两者相关的是list.lenght = object.lenght
你只要通过list.get(index)取就可以了,给你的应用有什么关系么?
AcHerat 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hzw2312 的回复:]

引用 3 楼 trocp 的回复:
楼主是要查询状态不是3的会议室的会议记录吗?
and "+ecid+" in
这个ecid是什么意思?这人ecid不在Tbmeetroom 中,怎么又能作为Tbmeetroom 的条件来筛选呢

ecid这个鬼东西也是今天早上才上来的需求~~~以前没有啊! 艹死它!
o(︶︿︶)o ~~~老大说了、必须要判断ecid啊!
我转换的hq……
[/Quote]

你的实体里不是有 get set 方法吗? 获取一个或者多个按相应的get方法就是了,具体的类型要看你这个属性的类型,得到的类型是一致的!
BUG胡汉三 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 acherat 的回复:]
select * from Tbmeetroom t where t.status <> 3 and "+ecid+" in (select ecid from

Tbmeetmgr where huiyishi = t.id) order by t.id desc

楼主这个写法有误吧!如果“”之间不是ecid 而是其他的字符串,这条SQL会出异常的!

Hibernate会返回什……
[/Quote]

我的ecid是Long类型的~~~在Action中已经判断好了!
我的意思是我直接List list = 调用查询方法。
这个时候、在不同的hql中list里面存储的类型是什么。
oO临时工Oo 2011-04-21
  • 打赏
  • 举报
回复
使用Hibernate原生sql查询返回的list

集合中存储的信息是Object[]并不是对象


query.list不是返回List么,怎么会Object[]
BUG胡汉三 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 trocp 的回复:]
楼主是要查询状态不是3的会议室的会议记录吗?
and "+ecid+" in
这个ecid是什么意思?这人ecid不在Tbmeetroom 中,怎么又能作为Tbmeetroom 的条件来筛选呢
[/Quote]
ecid这个鬼东西也是今天早上才上来的需求~~~以前没有啊! 艹死它!
o(︶︿︶)o ~~~老大说了、必须要判断ecid啊!
我转换的hql:


select t from Tbmeetroom t where t.status <> 3 and "+ecid+" in (select tr.ecid from Tbmeetmgr tr where tr.tbmeetroom.id = t.id) order by t.id desc"



现在希望各位给说说:
使用Hibernate原生sql查询返回的list

集合中存储的信息是Object[]并不是对象、这是什么原因~~~另外、希望各位给说说、hql语句查询的

时候、如select u.id,u.name from Users u 这条语句、返回的是list、但是list集合里面存储的好像

是数组、还有当我只查询一个字段、或者是三个、三个以上什么的、Hibernate会返回什么类型给我。



AcHerat 2011-04-21
  • 打赏
  • 举报
回复
select * from Tbmeetroom t where t.status <> 3 and "+ecid+" in (select ecid from

Tbmeetmgr where huiyishi = t.id) order by t.id desc

楼主这个写法有误吧!如果“”之间不是ecid 而是其他的字符串,这条SQL会出异常的!

Hibernate会返回什么类型给我!

要看你list是按哪个实体来装的,对应到实体的类型!
ijlkdwg 2011-04-21
  • 打赏
  • 举报
回复
Hql 语句和SQL语句大致相同,你把 t.status <> 3 改成 t.status !=3 后面的语句也跟着写进去看看,如果你是用SQL语句的话我建议你去下一个SQL 跟踪器,能跟踪SQL 出错的问题,实在不行你Hibernate.xml中加一句, show_sql true 它可以把SQL 语打印出来..........
oO临时工Oo 2011-04-21
  • 打赏
  • 举报
回复
楼主是要查询状态不是3的会议室的会议记录吗?
and "+ecid+" in
这个ecid是什么意思?这人ecid不在Tbmeetroom 中,怎么又能作为Tbmeetroom 的条件来筛选呢
BUG胡汉三 2011-04-21
  • 打赏
  • 举报
回复
其实、转换hql这块倒是比较简单!最主要的就是我说的Hibernate返回的list集合中存储的数据类型!
怎么没人啊!!!
hql我已经转换好了、就等数据类型了!!!
BUG胡汉三 2011-04-21
  • 打赏
  • 举报
回复
自己先顶一个~~~~!我在线等!!!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧