关于hibernate使用的一些小问题总结:

createQuery与createSQLQuery区别
本文探讨了Hibernate框架中createQuery与createSQLQuery的区别。createQuery使用HQL查询语言,返回的是Hibernate生成的Bean对象;createSQLQuery则直接使用SQL语句查询,并返回对象数组。文章还介绍了如何使用createSQLQuery返回Bean对象的方法。

createQuery 与 createSqlQuery 的区别

hibernate 中createQuery与createSQLQuery两者区别是:
前者用的hql语句进行查询,后者可以用sql语句查询
前者以hibernate生成的Bean为对象装入list返回
后者则是以对象数组进行存储
所以使用createSQLQuery有时候也想以hibernate生成的Bean为对象装入list返回,就不是很方便
突然发现createSQLQuery有这样一个方法可以直接转换对象
Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);
XXXXXXX 代表以hibernate生成的Bean的对象,也就是数据表映射出的Bean。

因此:

String hql =
" SELECT fr.CONTENT,fr.CREATE_TIME FROM t_job_factory_reply fr WHERE fr.JOB_ID = ? "+
" UNION ALL "+
" SELECT opr.CONTENT,opr.CREATE_TIME FROM t_job_operator_reply opr WHERE opr.FACTORY_REPLY_ID in(SELECT fr.REPLY_ID FROM t_job_factory_reply fr WHERE fr.JOB_ID = ?)" +
"ORDER BY CREATE_TIME DESC ";

此时用 query.createQuery的话,就会报错,内容为 UNION ALL 以及 Select 不应存在此位置,而 query.createSQLQuery 则不报错 分析:

前者以hibernate生成的Bean为对象装入list返回,然而 用 UNION ALL 组合起来的结果是一个数组形式,而前者需要hibernate生成的bean来封装,此时找不到,故报错。而用 SqlQuery装为object数组,则通过。

 

转载于:https://www.cnblogs.com/yxb-ylp-520/p/7744304.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值