`
chaoyi
  • 浏览: 306316 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate 内连接和左外连接

 
阅读更多
package test;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import util.HibernateSessionFactory;
import entity.Student;
import entity.Teacher;

public class TestInnerJoin {
	public static void main(String[] args) {
		jion();// 内连接
		leftJoin();// 左外连接
	}

	private static void jion() {
		// 打开Session
		Session session = HibernateSessionFactory.getSession();
		// 内连接 hql 语句
		String hql = "from Student s inner join s.teacher";
		try {
			// 实例查询对象
			Query query = session.createQuery(hql);
			// 获取列表
			List<Object[]> lists = query.list();
			// 遍历列表
			for (Object[] list : lists) {
				// 判断如果是 Student
				if (list[0] instanceof Student) {
					// 获取 Student 的列表
					Student student = (Student) list[0];
					System.out.print(student.getId() + " " + student.getName());
				}
				// 判断如果是 Teacher
				if (list[1] instanceof Teacher) {
					// 获取 Teacher 的列表
					Teacher teacher = (Teacher) list[1];
					System.out.println(teacher.getId() + " "
							+ teacher.getName() + " ");
				}
			}
			System.out.println("成功");
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			// 关闭 session,释放资源
			HibernateSessionFactory.closeSession();
		}
	}

	private static void leftJoin() {
		// 打开Session
		Session session = HibernateSessionFactory.getSession();
		// 内连接 hql 语句
		String hql = "from Student s left join s.teacher";
		try {
			// 实例查询对象
			Query query = session.createQuery(hql);
			// 获取列表
			List<Object[]> lists = query.list();
			// 遍历列表
			for (Object[] list : lists) {
				// 判断如果是 Student
				if (list[0] instanceof Student) {
					// 获取 Student 的列表
					Student student = (Student) list[0];
					System.out.print(student.getId() + " " + student.getName());
				}
				// 判断如果是 Teacher
				if (list[1] instanceof Teacher) {
					// 获取 Teacher 的列表
					Teacher teacher = (Teacher) list[1];
					System.out.println(teacher.getId() + " "
							+ teacher.getName() + " ");
				}
			}
			System.out.println("成功");
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			// 关闭 session,释放资源
			HibernateSessionFactory.closeSession();
		}
	}
}

 

效果图:

 

 

  • 大小: 54.3 KB
分享到:
评论

相关推荐

    Hibernate迫切连接和普通连接的区别实例详解

    这里使用了`LEFT JOIN FETCH`关键字来实现迫切左外连接,它会确保即使在`Department`中没有对应的`Employee`,也会返回所有的`Department`对象,并且每个`Department`对象的`Employee`集合都会被初始化,包含了所有...

    hibernate的使用心得

    Hibernate支持多种连接类型,包括`inner join`(内连接)、`left outer join`(左外连接)、`right outer join`(右外连接)和`full join`(全连接)。`with`关键字用于提供额外的连接条件,类似于SQL中的`on`关键字...

    Hibernate的缓存级联查询

    HQL(Hibernate Query Language)是Hibernate提供的面向对象的查询语言,它支持多种连接查询类型,如内连接、迫切内连接、隐式内连接、左外连接、迫切左外连接、右外连接和交叉连接,提供了与SQL类似的查询功能。...

    hibernateHQL关联查询

    4. **全外连接(Full Outer Join)**:虽然HQL本身不支持全外连接,但可以通过组合左外连接和右外连接来模拟实现。 #### 五、应用场景 在实际开发中,HQL关联查询的应用场景非常广泛,特别是在需要跨多个实体进行...

    HQL连接查询和注解使用总结

    HQL支持多种连接查询方式,包括内连接、左外连接等,并且可以通过`fetch`关键字来明确指定关联级别的查询策略。 #### 各种连接查询详解 - **内连接(Inner Join)** - 语法:`[inner]join` - 描述:内连接只返回...

    hibernate面试题2

    - **迫切左外连接检索(Fetch Join)**:兼顾透明性和效率,但可能加载不必要的对象,且复杂的表连接可能影响性能。 2. **查看Hibernate生成的SQL**:在`applicationConfig.xml`中设置`hibernate.show_sql`为`true...

    Hibernate Query Language

    - 支持不同类型的连接:内连接(`inner join`)、左外连接(`left outer join`)、右外连接(`right outer join`)、全连接(`full join`)。 ### 8. `select`子句 - `select`子句用于指定查询结果中包含的对象和...

    Hibernate hql查询语法总结

    HQL支持SQL的连接查询,包括内连接、左外连接、右外连接和全连接(不常用)。例如,使用内连接: ```java select a.id, b.id from A a inner join B b on a.id = b.id ``` 等价于SQL中的`INNER JOIN`。查询结果通常...

    传智播客_hibernate

    4. ** Criteria API的Join操作**: 支持多表查询,包括内连接(inner join)、左连接(left join)等。 5. **Criteria API的Projections**: 用于结果集的投影,例如获取平均值、计数等。 **四、事务管理** 1. **...

    hibernate hql基本操作

    HQL支持关联查询,包括内连接、左外连接、右外连接和全连接。 - **内连接**:`inner join`用于连接两个实体之间的关联关系,例如`from Cat as cat inner join cat.mate as mate`。 - **左外连接**:`left outer ...

    struts1和Hibernate实例

    4. **Hibernate配置**:hibernate.cfg.xml文件,定义数据库连接和实体映射。 5. **实体类**:如User类,映射到数据库中的用户表。 通过这个实例,初学者可以了解如何在Struts1中整合Hibernate进行数据库操作,同时...

    hibernate面试题大全

    在Hibernate中,针对关联对象的检索,有三种主要的检索策略:立即检索(Eager Fetching)、延迟检索(Lazy Fetching)和迫切左外连接检索(Anxious Left Join Fetching)。下面将详细探讨这三种策略的特点。 #### 1. 立即...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     18.1.8 使用SQL风格的交叉连接和隐式内连接  18.1.9 关联级别运行时的检索策略  18.2 投影查询  18.3 报表查询  18.3.1 使用聚集函数  18.3.2 分组查询  18.3.3 优化报表查询的性能  18.4 高级查询技巧  ...

    hibernate查询语句--HQL

    HQL 支持多种类型的连接操作,包括内连接、左连接、右连接和全连接。这些连接操作可以帮助开发人员在多个表之间建立关联,从而实现更复杂的查询需求。 1. **内连接**: ```hql select employee.ID as id1, ...

    Hibernate HQL.doc

    HQL支持四种类型的连接:inner join(内连接)、left outer join(左外连接)、right outer join(右外连接)和full join(全连接)。简写形式如`join`和`left join`也是允许的。`fetch`连接用于一次性初始化相关联...

    MyEclipse10.7由表自动生成Hibernate实体对象

    一旦数据库连接建立成功,可以继续添加Hibernate特性到JavaWeb项目中,以便使用Hibernate反向工程功能。具体步骤为: - 切换至MyEclipse Java Enterprise透视图视窗。 - 在项目上右键点击,选择MyEclipse-&gt;Add ...

    hibernate 框架的基础四

    外连接分为左外连接和右外连接,它们分别返回左表或右表的所有记录以及另一表中匹配的记录。在HQL中,左外连接更为常见。 - **左外连接**: - 使用 `LEFT JOIN` 关键字进行连接。 - 示例代码: ```java Query ...

    hibernate生成实体类

    通过以上步骤,我们可以很方便地利用MyEclipse和Hibernate工具来自动生成实体类,极大地提高了开发效率。当然,在实际项目中还需要根据具体情况进行一定的定制化调整,但总体来说,这种方式大大减轻了开发者的工作...

    HIbernate+Maven入门demo

    Hibernate通过Hibernate Configuration(配置文件)和SessionFactory(会话工厂)来初始化和管理数据库连接。 ### 2. Maven基础 Maven是Apache开发的项目管理和综合工具,它通过在`pom.xml`文件中定义项目依赖、...

Global site tag (gtag.js) - Google Analytics