最近在做毕业设计,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;
}
分享到:
相关推荐
标题"Hibernate3.1中文帮助文档"表明这是一份关于Hibernate 3.1版本的中文参考资料,旨在为用户提供在使用该框架时的技术支持和指导。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用Java对象来...
7. **多态性支持**:Hibernate 允许通过继承关系来映射数据库表,支持单表继承、联合继承和表格分片等多种策略。 8. **懒加载(Lazy Loading)**:该特性允许延迟加载关联的对象,直到真正需要时才从数据库加载,...
下面,我们将深入探讨Hibernate 3.1的核心概念、配置、对象持久化、查询语言以及更多相关知识点。 1. **核心概念**: - **实体(Entities)**:在Hibernate中,实体代表数据库表的行,是业务逻辑中的对象模型。 -...
2. **更强大的查询语言HQL**:Hibernate Query Language (HQL)在3.1版本中得到了扩展,支持更多的SQL语法,如子查询、联合查询等,使得开发者可以更加灵活地构造复杂的数据查询。 3. **类型安全的Criteria API**:...
然而,随着技术的不断迭代,后续的版本引入了更多优化和新特性,如二级缓存支持、更灵活的查询语言(HQL和JPQL)等,使得Hibernate成为Java开发中不可或缺的工具。在实际项目中,开发者应根据项目需求选择适合的...
3. **映射机制**:实体类与数据库表之间的映射由hibernate.cfg.xml或@Entity注解实现,如@ManyToOne、@OneToMany、@OneToOne和@ManyToMany等关系映射。 4. **查询语言HQL**:Hibernate Query Language是面向对象的...
Hibernate 支持单表继承、联合继承和表-per-hierarchy 策略,将继承层次结构映射到数据库的不同方式。 ### 4. 关联映射 讨论了 Hibernate 如何处理一对一、一对多、多对一和多对多的关系映射,包括懒加载、级联...
14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....
14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....
14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....
5.1.2 每个带有联合的具体类一张表 5.1.3 每个类层次结构一张表 5.1.4 每个子类一张表 5.1.5 混合继承策略 5.1.6 选择策略 5.2 Hibernate类型系统 5.2.1 概述实体和值类型 5.2.2 内建...
3.1 创建Hibernate的配置文件 3.2 创建持久化类 3.3 创建数据库Schema 3.4 创建对象-关系映射文件 3.4.1 映射文件的文档类型定义(DTD) 3.4.2 把Customer持久化类映射到CUSTOMERS表 3.5 通过...
- **类间关系与键值的映射**:支持对象之间的关联关系,如一对多或多对多关系,并将其映射为数据库中的外键或联合键。 常见的O/R Mapping实现包括TopLink(商业产品)、iBatis和Hibernate。 ##### 2.2 Hibernate ...
6. **Inheritance Mapping**:对于继承关系的映射,Hibernate 提供了单表继承(Single Table Inheritance)、联合继承( Joined Table Inheritance)和表 per 类继承(Table per Concrete Class Inheritance)三种...
HQL是Hibernate特有的查询语言,类似SQL,但操作的是对象而非表,支持更丰富的查询功能,如关联查询、分页、排序等。 三、数据映射类型 3.1 映射类型的作用 映射类型用于将Java对象的属性与数据库表的列对应,实现...
14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9. 表达式 ...
14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....
14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....