链接查询
以班级和学生为例子:
班级对学生如果是延迟加载。
team.hbm.xml
<set name="students" cascade="all" inverse="true" lazy="true" batch-size="3">
<key column="teamID"></key>
<one-to-many class="com.vo.Student"></one-to-many>
</set>
代码:
Team team = null;
Student stu = null;
Query q = session.createQuery("from Team t join t.students");
List list = q.list();
Object obj[] = null;
for(int i=0;i<list.size();i++)
{
obj = (Object[])list.get(i);//取得集合中的第I个数组
team=(Team)obj[0];//team是数组中的第一个对象
stu = (Student)obj[1];//stu是数组中的第2个对象
System.out.println(stu.getName()+"属于:"+team.getName());
}
tran.commit();
session.close();
System.out.println(team.getStudents().size());
打印结果:
Hibernate: select team0_.ID as ID0_0_, students1_.ID as ID1_1_, team0_.Name as Name0_0_, students1_.Name as Name1_1_, students1_.TeamID as TeamID1_1_ from test.team team0_ inner join test.student students1_ on team0_.ID=students1_.teamID
zhangfan属于:一中
tanlian属于:十一中
tuping属于:四中
BOSS测试属于:湖南科技大学
新学期属于:湖南科技大学
Exception in thread "main" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.vo.Team.students, no session or session was closed
原因是在SESSION关闭以后,由于班级对学生是延迟加载,所以当要得到学生集合,报出了异常。
将以上延迟加载改为立即加载就OK了。
或者更改HQL
Query q = session.createQuery("from Team t join fetch t.students");
运行程序发现报出类型转换异常。
更改代码:
Team team = null;
Student stu = null;
Query q = session.createQuery("from Team t join fetch t.students");
List list = q.list();
Object obj[] = null;
for(int i=0;i<list.size();i++)
{
/* obj = (Object[])list.get(i);
team=(Team)obj[0];
stu = (Student)obj[1];*/
team=(Team)list.get(i);
System.out.println(team.getName());
}
tran.commit();
session.close();
System.out.println(team.getStudents().size());
使用FETCH以后,类被初始化进入了TEAM的STUDENTj集合中。虽然TEAM对STUDENT是延迟加载,但是再HQL使用预先抓取以后,TEAM中的STUDENT集合被初始化了,所有在SESSION关闭以后还是可以打印STUDENT的信息。
分享到:
相关推荐
这篇博客"Hibernate SQLQuery 本地查询"可能详细讲解了如何利用Hibernate的SQLQuery类来执行SQL查询,以及如何在实际项目中结合BaseDaoSupport类实现数据访问。 首先,让我们理解SQLQuery的基本用法。在Hibernate中...
Hibernate Query Language,简称HQL,是Hibernate框架中用于执行数据库查询的一种面向对象的查询语言。它与传统的SQL语言非常相似,但更简洁,更重要的是,HQL理解面向对象的概念,如继承、多态、关联、聚合和组合。...
《Hibernate查询条件查询详解》 Hibernate作为Java领域中广受欢迎的对象关系映射(ORM)框架,极大地简化了数据库操作。其强大的查询能力是其核心功能之一。本篇将深入探讨Hibernate的条件查询,帮助开发者更好地...
在执行查询时,Hibernate提供了Query和Criteria API来实现这一目标。 1. **使用HQL(Hibernate Query Language)** HQL是Hibernate特有的查询语言,类似于SQL,但更面向对象。查询所有数据的HQL语句如下: ```...
Hibernate提供了一种灵活的查询语言——HQL(Hibernate Query Language),以及 Criteria 查询和 Criteria API,它们都可以用来获取数据表中的特定字段。 二、Hibernate配置 在使用Hibernate进行查询前,首先需要...
在实际应用中,你还可以结合Hibernate的 Criteria 查询、Criteria API 或者 JPA 的 Query API 来实现更复杂的聚合查询,如带条件的聚合、子查询等。 总之,Hibernate提供的聚合函数使得在Java应用程序中进行数据...
Hibernate Query Language(HQL)是Hibernate框架中用于操作对象关系映射(ORM)的一种查询语言。它是面向对象的,设计目的是让开发人员可以使用对象而不是数据库表进行查询,从而简化了与数据库交互的过程。HQL的...
在Hibernate中,HQL(Hibernate Query Language)是专为ORM设计的一种面向对象的查询语言,它允许开发者以类和对象的方式进行数据查询,而不是直接使用SQL。本资料主要涵盖了Hibernate HQL查询的基本概念、语法以及...
在Java的持久化框架Hibernate中,分页查询是常见的需求,尤其在处理大量数据时,为了提高用户体验,分页展示数据至关重要。本文将探讨Hibernate中两种主要的分页方式:`query.scroll()`和使用`query.setFirstResult...
本文将深入探讨Hibernate的查询方式,特别聚焦于HQL(Hibernate Query Language)查询方式以及QBC(Query By Criteria)查询方式,旨在帮助读者全面理解并掌握这些核心功能。 #### HQL查询方式:面向对象的查询语言...
Query接口是Hibernate提供的一种用于执行HQL(Hibernate查询语言)或SQL查询的API。HQL是一种面向对象的查询语言,它可以更加自然地与Java对象交互,而不是直接操作SQL语句。Query接口提供了丰富的方法,如设置参数...
这里使用了HQL(Hibernate Query Language)来执行查询。例如,在`getProductsMenuSub`方法中,通过以下HQL语句实现了连表查询: ```java String queryString = "select a.productsName from TopProducts as a, ...
本文将深入探讨如何使用Hibernate进行数据表中的部分字段查询,这在实际开发中是非常常见的需求。 首先,理解Hibernate的核心概念:实体(Entity)、持久化类(Persistent Class)和映射文件(Mapping File)。实体...
### Hibernate SQLQuery 查询Oracle char类型结果为一个字符的解决方法 在使用Hibernate框架结合Oracle数据库进行数据查询时,经常会遇到一个问题:当查询的结果集中包含char类型的字段时,Hibernate可能会将其映射...
### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。Hibernate作为一款流行的Java持久层框架,提供了一种非常便捷的方式来处理...
Hibernate Query Language (HQL) 是Hibernate提供的面向对象的查询语言,类似于SQL,但它是针对Java对象的。HQL允许我们以类和属性的名字而不是表和列来编写查询,降低了与数据库的耦合度。例如,我们可以使用以下...
当我们想要实现模糊查询时,可以利用`Criteria` API或者`HQL`(Hibernate Query Language)来完成。例如,如果我们要查询一个名为`User`的实体类中所有名字包含"John"的用户,可以这样做: ```java Session session...
Hibernate Query Language(简称 HQL)是 Hibernate 提供的一种强大的查询语言,其设计目标是为了提供一种更接近于面向对象编程的查询方式。本文将深入探讨 HQL 的基本概念、语法以及一些高级用法,帮助读者更好地...
在Hibernate中,查询数据主要通过Criteria、HQL(Hibernate Query Language)和Query API三种方式。首先,让我们来看看Criteria查询。Criteria API提供了一种类型安全的方式,通过构建查询条件来执行数据库查询。...
在Hibernate中,我们通常使用HQL(Hibernate Query Language)或Criteria API进行查询,但这些方式并不支持复杂的动态查询。为了实现动态SQL,我们可以借助于Hibernate的QBC(Query By Criteria)和Criteria API,...