标题:[讨论]hibernate多表交叉查询
只看楼主
xiao_2008
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2006-4-22
 问题点数:0 回复次数:6 
[讨论]hibernate多表交叉查询
开发环境:SSH
那做过三个表或三个以上的多表查询HQL?讨论?
搜索更多相关主题的帖子: hibernate 交叉 SSH 环境 查询 
2007-08-06 12:08
adsl0231
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2006-3-29
得分:0 
回复:(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-08-06 13:50
xiao_2008
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2006-4-22
得分:0 

过了几天通过几次实验我终于实验出来了:
表表之间的关系莫非三中:
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-08-09 22:32
xiao_2008
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2006-4-22
得分:0 
补充
但是;
String hql="";前面加select 语句就不对了

看动画片
2007-08-09 22:33
huluhulu88
Rank: 1
等 级:新手上路
帖 子:118
专家分:0
注 册:2007-5-19
得分:0 

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


2007-08-10 08:55
xiao_2008
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2006-4-22
得分:0 
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-08-12 19:13
huluhulu88
Rank: 1
等 级:新手上路
帖 子:118
专家分:0
注 册:2007-5-19
得分:0 
以下是引用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-08-13 12:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-160669-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.260510 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved