最近在做毕业设计,Felx+Spring+Hiberinate , 用的Myeclipse6.0.1自带的Hibernate3.1包,在做多表查询时遇到了些问题,没有Hibernate3.2的
SQLQuery q=(SQLQuery) this.getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Production1.class));
的setResultTransformer()方法,无法获得List结果集映射到VO类中,查询网上众多方法后总结了下方法实现多表查询。
Staffshow.java VO类,用来存多表联合查询的Set,Get
package com.gxu.bean;
public class Staffshow {
private Long staffid;
private String staffname;
private String positionName;
private String deptname;
private String sex;
public Staffshow()
{}
public Staffshow(Long staffid,String staffname,String sex,String positionName,String deptname)
{
this.staffid = staffid;
this.staffname = staffname;
this.positionName = positionName;
this.deptname = deptname;
this.sex=sex;
}
public Long getStaffid() {
return staffid;
}
public void setStaffid(Long staffid) {
this.staffid = staffid;
}
public String getStaffname() {
return staffname;
}
public void setStaffname(String staffname) {
this.staffname = staffname;
}
public String getPositionName() {
return positionName;
}
public void setPositionName(String positionName) {
this.positionName = positionName;
}
public String getDeptname() {
return deptname;
}
public void setDeptname(String deptname) {
this.deptname = deptname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
show()方法,其中Staff,Dept,Position为Hibernate映射数据库自动生成的VO类
public ArrayList show() {
List list = null;
ArrayList al = new ArrayList();
// /取得Seesion对象
Session session = HibernateSessionFactory.getSession();
// /启动事务
Transaction ta = session.beginTransaction();
// /sql语句
String sql = "select s.*,d.*,p.* from Staff as s ,Dept d,Position p "
+ "where s.deptid=d.deptid and s.positionid=p.positionid";
try {
// /创建Query对象
SQLQuery query = session.createSQLQuery(sql);
query.addEntity("s", Staff.class);
query.addEntity("d", Dept.class);
query.addEntity("p", Position.class);
System.out.println(list.size());
for (int i = 0; i < list.size(); i++) {
Object[] obj = (Object[]) list.get(i);
Staffshow ss = new Staffshow();
for (int j = 0; j < obj.length; j++) {
if (obj[j] instanceof Staff) {
Staff s = (Staff) obj[j];
ss.setStaffid(s.getStaffid());
ss.setStaffname(s.getStaffname());
ss.setSex(s.getSex());
System.out.print(s.getStaffname() + " ");
} else if (obj[j] instanceof Dept) {
Dept d = (Dept) obj[j];
ss.setDeptname(d.getDeptname());
System.out.print(d.getDeptname() + " ");
} else if (obj[j] instanceof Position) {
Position p = (Position) obj[j];
ss.setPositionName(p.getPositionName());
}
}
System.out.println(ss.getStaffname() + "----"
+ ss.getDeptname() + " " + ss.getPositionName());
al.add(ss);
System.out.println();
}
for (int k = 0; k < al.size(); k++) {
Staffshow s = (Staffshow) al.get(k);
System.out.println("<" + s.getStaffid() + " "
+ s.getStaffname() + " " + s.getDeptname() + " "
+ s.getPositionName() + ">");
}
}
ta.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return al;
}