首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

hibernate多表查询求相应的HQL语句,该怎么处理

2012-01-23 
hibernate多表查询求相应的HQL语句一个多表查询的问题表分别为contest字段 contest-idtitleremesterscore【

hibernate多表查询求相应的HQL语句
一个多表查询的问题
表分别为contest 字段 contest-id title remester score【(大于60的个数)和一共的个数】
contest-config 字段 contest-id type id(统计个数)这个表要根据type的不同计算出id的数目
contest-detail 字段 contest-id sutudent-id 
要输出sutudent-id(统计总共的个数) title type为0的id值/type为1的id值/type为2的id值 remester 大于60的score个数/总共score的个数
这东西怎么写HQL啊
我都快疯了

[解决办法]
说的也不清楚,我看了都急死了
[解决办法]
用hql不行的话,你也可以直接用原生态的sql去写,同样能达到你的效果
[解决办法]
帮楼主顶顶,顺便接点分哦,谢谢啦
[解决办法]
帮顶
[解决办法]
HQL查不出来,直接用createSqlQuqry查吧,支持Sql
[解决办法]
hql语句也支持聚合函数的。你这些需求都可以通过聚合函数解决。第一个用count 要求出>60的就加个where条件
第二个则是要用到分组group by type 统计
第三个当然也是用count
[解决办法]
比如第2个。求出的结果形如
type sum
0 x
1 y
2 z
这个结果用hql语句查询出来返回的是个对象数组。取数据你会吧?
[解决办法]
第一:你可以自己去创建一个类。下面的是我以前用到的。作为参考;
第二:可以使用视图,然后利用视图去查询。就是有一个缺点。只能查询。

Java code
import java.util.List;import javax.sql.DataSource;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.support.JdbcDaoSupport;/** * 作者@:chen boning *  * @说明:自定义 */public class EhomeJoyDAO {    JdbcTemplate jdbcTemplate;    /**     * 销售统计     *      * @param enterpriselogname     * @return     */    public List getbusinessbuy(String enterpriselogname, String date) {        String sql = "select  t.goodsname,sum(t.sumprice) as sumprice  from ehome_vjoy t where t.enterpriselogname='"            + enterpriselogname            + "' and to_char(t.lasttime,'yyyy-MM-dd') like '2008-"            + date+"-%'group by t.goodsname";        List list = this.getJdbcTemplate().queryForList(sql);        return list;    }    public JdbcTemplate getJdbcTemplate() {        return jdbcTemplate;    }    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {        this.jdbcTemplate = jdbcTemplate;    }    /**     * 财务报表     *      * @return     */    public List getbusinessreport(String enterpriselogname, String date) {        String sql = "select  t.goodsname,sum(t.sumprice) as sumprice,t.enterprisename  from ehome_vjoy t where t.enterpriselogname='"                + enterpriselogname                + "' and to_char(t.lasttime,'yyyy-MM-dd') like '2008-"                + date+"-%'group by t.goodsname,t.enterprisename";        List list = this.getJdbcTemplate().queryForList(sql);        return list;    }
[解决办法]
正在关注中,请稍候。。。。。
[解决办法]
hql 是操作对象的,如果你这三个表没有关系,不能用union
用sql是正确的选择:
如果contest-id 是这三个表的主键,并且都是一一对应的:

表一有4个字段分别为contest-id title remester score 
表二有三个字段分别为contest-id type id 
表三有两个字段分别为contest-id sutudent-id 

select contest-id ,title ,sum(case或者decode函数(oracle专用)(score >= 60,1,0) )合格人数,count(score ) 总数,sum(case或者decode函数(oracle专用)(type = 0,1,0) )类型为0的数, 
sum(case或者decode函数(oracle专用)(type = 1,1,0) )类型为1的数,
sum(case或者decode函数(oracle专用)(type = 2,1,0) )类型为2的数

from 表1,表2,表三
where 表1.contest-id = 表2.contest-id = 表3.contest-id 
group by contest-id ,title 




如果要加remester,就在select 和 group后加入。
上面只是一个思路,case或者decode函数的用法是不正确的,只供楼主参考,供大家讨论。
[解决办法]
顶一个!
[解决办法]
createSqlQuery
[解决办法]
深圳JAVA J2EE QQ①群 32763598 深圳JAVA J2EE QQ②群 6086837 
欢迎深圳的JAVA程序员加入,共同探讨技术与工作、项目合作、共享信息、结交朋友
加入请输入验证信息:SZJP
[解决办法]
fghfghfghfghdfhdhfhfsh
[解决办法]
up

[解决办法]
来学习的
[解决办法]
给你举个例子吧

String hql="select q.qid,q.qtitle,q.qcontent,q.qscore,q.answerNum,q.qdate,q.newdate,u.username from Question q,Grade g,Subject s ,Users u 
where q.subject.subjectid = s.subjectid and q.grade.gradeid = g.gradeid " +
"and u.userid = q.users.userid and g.gradeid=:gid and s.subjectid=:sid";
[解决办法]
学习!

热点排行