`
supben
  • 浏览: 329177 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate qbc

    博客分类:
  • SSH
阅读更多
一级级联到处都是,直接上2级级联吧。
三个表,user,grade,school。
学生关联年级,年级关联学校。现在我想查出user的同时知道他所在的班级和学校!

User.hbm.xml
<hibernate-mapping>
		<class name="com.supben.pojo.User" table="User">
				<id name="userId" type="java.lang.Long">
						<column length="20" name="userId" />
						<generator class="identity"></generator>
				</id>

				<property name="userName" type="java.lang.String">
						<column name="userName" />
				</property>

			 <many-to-one name="grade" column="gradeId" class="com.supben.pojo.Grade" />   
		</class>
</hibernate-mapping>


Grade.hbm.xml
<hibernate-mapping>
	<class name="com.supben.pojo.Grade" table="grade">
		<id name="gradeId" type="java.lang.Integer">
			<column length="20" name="gradeId"/>
			<generator class="identity"></generator>
		</id>

		<property name="gradeName" type="java.lang.String">
			<column name="gradeName"/>
		</property>
		
		<many-to-one name="school" column="schoolId" class="com.supben.pojo.School"/> 
	</class>
</hibernate-mapping>


School.hbm.xml
<hibernate-mapping>
	<class name="com.supben.pojo.School" table="school">
		<id name="schoolId" type="java.lang.Integer">
			<column length="20" name="schoolId"/>
			<generator class="identity"></generator>
		</id>

		<property name="schoolName" type="java.lang.String">
			<column name="schoolName"/>
		</property>
	</class>
</hibernate-mapping>


qbc查询方法
	@SuppressWarnings("unchecked")
	public List<User> find3Table() {
		Criteria c = userDao.createCriteria();
		//添加user表的查询字段
		c.add(Restrictions.eq("userName", "supben"));
		//添加grade表的关联,并指定别名为grade
		c.createAlias("grade","grade");
		//添加grade表查询字段
		c.add(Restrictions.eq("grade.gradeName", "101"));
		//添加schoo表的关联,并指定别名为school
		c.createAlias("grade.school","school");
		//添加school表的查询字段
		c.add(Restrictions.eq("school.schoolName", "宿松中学"));
		//添加user表和school表互相关联的条件
		c.add(Restrictions.eqProperty("userId", "school.schoolId"));
		return c.list();
	}
}


测试方法
	public void testQBC(){
		List<User> userList = userService.find3Table();
		for (User user : userList){
			System.out.println("姓名: "+user.getUserName());
			System.out.println("班级: "+user.getGrade().getGradeName());
			System.out.println("学校: "+user.getGrade().getSchool().getSchoolName());
		}






说明:如果不涉及到从表中的字段的话,其实还有一种更简单的方法
	@SuppressWarnings("unchecked")
	public List<User> find3Table() {
		Criteria c = userDao.createCriteria();
		//立即用join的方法加载grade
		c.setFetchMode("grade", FetchMode.JOIN);	
		//立即用join的方式加载school
		c.setFetchMode("grade.school", FetchMode.JOIN);
		//user表中的查询字段
		c.add(Restrictions.eq("userName", "supben"));
		return c.list();
	}

问题的关键在哪:这样你添加不了班级表的条件来构建查询,类似于
c.add(Restrictions.eq("grade.gradeName", "101"));

一直报错说,无法解析user的grade.gradeName属性,必须要起别名!
或者是我没有找到,欢迎高手指教
0
1
分享到:
评论

相关推荐

    Hibernate QBC高级查询.rar

    本资源“Hibernate QBC高级查询”聚焦于Hibernate Query by Criteria(QBC)的高级用法,旨在帮助开发者深入理解并熟练运用这一强大的查询机制。 Query by Criteria是Hibernate提供的另一种查询方式,与HQL...

    Java_Hibernate QBC条件查询对比

    本篇文章将深入探讨Hibernate中的QBC(Query By Example)条件查询与传统的HQL(Hibernate Query Language)查询的对比,帮助开发者更好地理解和选择适合的查询方式。 QBC(Query By Example)是Hibernate提供的一...

    Hibernate(HQL、QBC查询)源码

    Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码

    Hibernate QBC分页

    本篇将详细介绍如何使用Hibernate的Query By Criteria (QBC)方式进行分页查询。 首先,我们需要了解QBC的基本概念。QBC是Hibernate提供的一种基于对象的查询方式,与HQL(Hibernate Query Language)类似,但更接近...

    Hibernate_QBC和Hibernate_QBE

    标题"Hibernate_QBC和Hibernate_QBE"提及了两个关于Hibernate的查询方式,即Query By Criteria(QBC)和Query By Example(QBE)。Hibernate是Java领域中一个广泛使用的对象关系映射(ORM)框架,它允许开发者以面向...

    Hibernate_QBC查询[归类].pdf

    Hibernate QBC(Query By Criteria)查询是Hibernate框架中一种面向对象的查询方式,它通过提供Criteria API使得开发者能够更方便地构建和执行SQL查询。QBC查询的优势在于它允许程序员用更加面向对象的方式处理...

    Hibernate_QBC案例.rar

    // 1.查询所有 // 2.条件查询 // 3.模糊查询 // 4.范围查询 // 5.排序查询(order by) // 6.分页查询 // 7.投影查询(只获取部分字段的结果) // 8.聚集函数使用(聚合函数)(count、sum、avg、max、min等) ...

    继承关系映射和HibernateQBC查询

    ### 继承关系映射和Hibernate QBC查询 #### 继承关系映射 继承作为面向对象编程的一个核心概念,在Java等面向对象语言中极为常见。然而,在数据库中表示继承关系并不直观,因为数据库通常使用表格来存储数据,而...

    Hibernate Criteria

    Hibernate QBC(Query By Criteria)查询是Criteria查询的另一种表达方式,其本质与Criteria查询相同,都是通过构建对象化的查询条件执行SQL。在QBC中,`Expression`类的角色被`Restrictions`类取代,但工作方式类似...

    Hibernate-HQL-QBC-QBE

    标题中的“Hibernate-HQL-QBC-QBE”涵盖了四个重要的Java持久化框架Hibernate中的概念,分别是Hibernate Query Language(HQL)、Query By Criteria(QBC)、Query By Example(QBE)以及相关的库文件。以下是对这些...

    Hibernate实例开发 HQL 与 QBC 查询

    本教程将深入探讨Hibernate中的两种查询方式:HQL(Hibernate Query Language)和QBC(Query By Example)。通过实例开发,我们将了解这两种查询方法的使用和它们之间的差异。 首先,HQL是Hibernate专门设计的一种...

    hibernate+spring+springmvc框架 @注解开发 详细配置注释/及hibernate的HQL/QBC/SQL查询代码使用及注释

    之前也发了一个,这个包含之前的,还添加了hibernate对数据库操作的代码(注意:controller层两个QBC/SQLTest代码不能运行,只是写出了操作数据库的除了HQL的另外2种方式)。我发现现在还是有很多公司用hibernate+...

    QBC的各种查询

    QBC,全称为Query By Criteria,是Java世界中一种基于对象的查询方式,主要用于简化Hibernate框架中的数据查询操作。QBC提供了一种面向对象的方式来构建查询条件,与SQL语句相比,它更易于理解和维护,尤其在处理...

    QBC的相关讲义和例题

    QBC的相关讲义和例题 QBC(Query By Criteria)查询方式是Hibernate提供的“更加面向对象”的一种检索方式。QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句。

    spring-boot基于hibernate实现简单分页

    在本文中,我们将深入探讨如何使用Spring Boot与Hibernate框架实现简单的分页功能。Spring Boot以其简洁的配置和快速的应用开发而受到广泛欢迎,而Hibernate作为Java领域中的一个强大的ORM(对象关系映射)工具,...

    hibernate教程hibernate教程

    Hibernate提供了多种检索数据的方式,包括HQL(Hibernate Query Language)和QBC(Query By Example)。HQL是一种面向对象的查询语言,类似于SQL但更关注对象和类。QBC则是通过对象实例进行查询,更灵活。此外,还...

    QBC查询的别名方的

    根据提供的文件信息,我们可以推断出此文档主要讨论了QBC(Query By Criteria)查询方法在Hibernate框架中的应用。下面将对文档中的几个关键点进行详细的解析与扩展。 ### QBC查询简介 QBC(Query By Criteria)是...

    QBC的使用全集大全

    **QBC(Query By Example)**是Hibernate框架中的一种查询方式,它允许开发者通过实例对象来构造查询条件,提供了一种更加面向对象的查询方法。QBC查询在处理复杂的动态查询时尤其方便,因为它可以避免编写大量的SQL...

Global site tag (gtag.js) - Google Analytics