Hibernate3.1实现多表联合查询

   最近在做毕业设计,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;

	}

你可能感兴趣的:(spring,sql,bean,Hibernate,J#)