那做过三个表或三个以上的多表查询HQL?讨论?
过了几天通过几次实验我终于实验出来了:
表表之间的关系莫非三中:
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;
}
}