A:id,aName,aDesc
B:id,aId,bName,bDesc
希望查询的结果是:A.id,B.id,A.aName,B.bName,B.bDesc
1.按照如下步骤操作:
①创建A和B的hibernate映射,相互不用关联,对应持久化类为APojo和BPojo
②创建结果集的载体CPojo,CPojo只是简单的一个JavaBean不是持久化类,它的属性与查询结果相对应:
public?class?CPojo?{??
????public?long?aId;??
????public?long?bId;??
????public?String?aName;??
????public?String?bName;??
????public?String?bDesc;??
????public?CPojo(long?aId,?long?bId,?String?aName,?String?bName,?String?bDesc)?{??
????????this.aId?=?aId;??
????????this.bId?=?bId;??
????????this.aName?=?aName;??
????????this.bName?=?bName;??
????????this.bDesc?=?bDesc;??
????}??
}2.HQL关联查询语句写法:
Select?new?com.XXX.CPojo(a.id,b.id,a.aName,b.bName,b.bDesc)?from?A?a,B?b?where?a.id?=?b.aId优点:不需要建立复杂的持久化类,也不需要建立视图。结果集可以自由定制。
一、 hibernate简介hibernate是一个jdo工具。它的工作原理是通过文件(一般有两种:xml文件和properties文件)把值对象和数据库表之间建立起一个映射关系。这样,我们只需要通过操作这些值对象和hibernate提供的一些基本类,就可以达到使用数据库的目的。例如,使用hibernate的查询,可以直接返回包含某个值对象的列表(list),而不必向传统的jdbc访问方式一样把结果集的数据逐个装载到一个值对象中,为编码工作节约了大量的时间。hibernate提供的hql是一种类sql语言,它和ejbql一样都是提供对象化的数据库查询方式,但hql在功能和使用方式上都非常接近于标准的sql.
二、 hibernate与jdbc的区别hibernate与jdbc的主要区别如下:
1、 hibernate是jdbc的轻量级的对象封装,它是一个独立的对象持久层框架,和app server,和ejb没有什么必然的联系。hibernate可以用在任何jdbc可以使用的场合,从某种意义上来说,hibernate在任何场合下取代jdbc.
2、 hibernate是一个和jdbc密切关联的框架,所以hibernate的兼容性和jdbc驱动,和数据库都有一定的关系,但是和使用它的java程序,和app server没有任何关系,也不存在兼容性问题。
3、 hibernate是做为jdbc的替代者出现的,不能用来直接和entity bean做对比。
三、 hibernate 进行多表关联查询hibernate对多个表进行查询时,查询结果是多个表的笛卡尔积,或者称为“交叉”连接。 例如:from student, book from student as stu, book as boo from student stu, book boo注意:让查询中的student和book均是表student和book对应的类名,它的名字一定要和类的名字相同,包括字母的大小写。别名应该服从首字母小写的规则是一个好习惯,这和java对局部变量的命名规范是一致的。
下面列举一个完整的例子来说明hibernate对多个表进行关联查询(其中粗体是我们要特别注意的地方,相应表tbookinfo和bookselection的结构和其对应的hbm.xml、class文件就不一一列举了,有需要详细了解的朋友,请联系我):
string stest = "from tbookinfo book, bookselection sel where book.id = sel.bookid";
collection result = new arraylist();
transaction tx = null;
try {
session session = hibernateutil.currentsession();
tx = session.begintransaction();
query query = session.createquery(sql);
result = query.list();
tx.commit();
} catch (exception e) {
throw e;
} finally {
hibernateutil.closesession();
}
//result list为object[] 的集合{{object[] } ,{object[] } ,{object[] } }
//object[] :{tbookinfo ,bookselection }与查询语句的顺序有关
arraylist slist = (arraylist) result;
iterator iterator1 = slist.iterator();
while (iterator1.hasnext()) {
object[] o = (object[]) iterator1.next();
ookinfo bookinfo = (tbookinfo) o[0];
bookselection bookselect = (bookselection) o[1];
system.out.println("bookinfo-title: " + bookinfo.gettitle());
system.out.println("bookselection-bookselectionid: " + bookselect.getid());
}