首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate3.1兑现多表联合查询

2012-09-09 
Hibernate3.1实现多表联合查询最近在做毕业设计,Felx+Spring+Hiberinate , 用的Myeclipse6.0.1自带的Hiber

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;}

热点排行