| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 698 人关注过本帖
标题:[讨论]hibernate多表交叉查询
收藏  订阅  推荐  打印 
xiao_2008
Rank: 2
等级:注册会员
帖子:103
积分:1158
注册:2006-4-22
[讨论]hibernate多表交叉查询

开发环境:SSH
那做过三个表或三个以上的多表查询HQL?讨论?
搜索更多相关主题的帖子: hibernate  交叉  SSH  环境  查询  
2007-8-6 12:08
adsl0231
Rank: 2
等级:注册会员
帖子:51
积分:610
注册:2006-3-29
回复:(xiao_2008)[讨论]hibernate多表交叉查询

Select e.username,e.name,r.rolename,e.phone,e.email,d.depname from Employees e,Departments d,Roles r where e.roleid=r.roleid and e.depid=d.depid

这句是昨天做项目的时候写的 感觉和 T-SQL没多大区别 就是这里的Employees 等不是表名 而是映射的实体BEAN的名字 我也是刚学 hibernate

2007-8-6 13:50
xiao_2008
Rank: 2
等级:注册会员
帖子:103
积分:1158
注册:2006-4-22

过了几天通过几次实验我终于实验出来了:
表表之间的关系莫非三中:
1.1:1
2.1:n
3.n:m
struts+spring+hibernate三层架构也如此,但是在这样的环境多对多的关系,就xml配置文件就很烦琐,而且非常容易出错误,特别是在对表操作的时候.
经过这次项目实战,让我觉悟到不需要配置xml表之间的关系也可以查询出多表之间的数据
下面给出一些精简代码赋予参考:

开发环境:
tomcat6.0+myeclipse+struts+spring+hibernate+orcle10g

持久层部分代码:

public class SetClassDaoImpl extends BaseDAO implements ISetClassDao{

// 及联查询
public List getByClassQuery(String cno) throws DataAccessException {

//select c.name,e.name ts.id
List<SetClassTechJo> list=new ArrayList<SetClassTechJo>();
String hql=" from MngTS as ts, MngTeacher as e, MngCourse as c "+
"where ts.tid=e.id and ts.cid=c.id and ts.cno=:cno";
System.out.println("----------------output result------------------");
Map<String, String> map=new HashMap<String, String>();
map.put("cno", cno);
System.out.println(cno);
Iterator it=this.getNamedQuery(hql, map).iterator();
while(it.hasNext()){
Object[] obj=(Object[])it.next();
SetClassTechJo jo=new SetClassTechJo();
MngTS ts=(MngTS)obj[0];
MngTeacher t=(MngTeacher)obj[1];
MngCourse c=(MngCourse)obj[2];
jo.setCid(c.getId());
jo.setTid(t.getId());
jo.setCoursename(c.getName());
jo.setTechname(t.getName());
jo.setId(ts.getId());
System.out.println("---"+jo.getId()+"---"+jo.getCoursename()+"---"+jo.getTechname());
list.add(jo);
}
return list;
}
}


看动画片
2007-8-9 22:32
xiao_2008
Rank: 2
等级:注册会员
帖子:103
积分:1158
注册:2006-4-22

补充
但是;
String hql="";前面加select 语句就不对了

看动画片
2007-8-9 22:33
huluhulu88
Rank: 2
等级:注册会员
帖子:118
积分:1304
注册:2007-5-19

xiao_2008:
虽然我不能解决你的问题,但我也碰到与你差不多的困难,你帮我回答回答。
http://bbs.bc-cn.net/viewthread.php?tid=161530


2007-8-10 08:55
xiao_2008
Rank: 2
等级:注册会员
帖子:103
积分:1158
注册:2006-4-22

String hql=" from MngTS as ts, MngTeacher as e, MngCourse as c "+
"where ts.tid=e.id and ts.cid=c.id and ts.cno=:cno";
这样就行了
hibernate叫做交叉查询

看动画片
2007-8-12 19:13
huluhulu88
Rank: 2
等级:注册会员
帖子:118
积分:1304
注册:2007-5-19

以下是引用xiao_2008在2007-8-12 19:13:14的发言:
String hql=" from MngTS as ts, MngTeacher as e, MngCourse as c "+
"where ts.tid=e.id and ts.cid=c.id and ts.cno=:cno";
这样就行了
hibernate叫做交叉查询

谢谢老兄的指教,那个异常没有了,而是换了另个一个异常,能不能再帮我看看。
谢谢啦!xiao_2008


2007-8-13 12:04
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.053072 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved