hibernate框架的查询方式hql的多表查询(二十二)

本文通过实例演示了Hibernate中如何使用内连接查询客户及其联系人的信息,并介绍了如何将查询结果封装到对象中以及解决数据重复的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简单演示

	/**
	 * 查询的客户,客户和联系人有关系 select * from cst_customer c, cst_linkman l where c.id =
	 * l.id
	 */
	@Test
	public void run1() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();

		// 内连接的写法
		Query query = session.createQuery(" from Customer c inner join c.linkmans ");
		// 默认的返回值是数组
		List<Object[]> list = query.list();
		for (Object[] objects : list) {
			System.out.println(Arrays.toString(objects));
		}

		tx.commit();
	}

二、封装到对象中

	/**
	 * 数据默认返回的是数组,把数据封装到对象中 
	 * 提供关键字:fetch 迫切连接。使用fetch关键字,把数据封装到对象中
	 */
	@Test
	public void run2() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();

		// 内连接的写法
		Query query = session.createQuery(" from Customer c inner join fetch c.linkmans ");
		// 默认的返回值是数组
		List<Customer> list = query.list();
		for (Customer customer : list) {
			System.out.println(customer);
		}

		tx.commit();
	}

三、解决数据重复

	/**
	 * 数据的重复问题
	 */
	@Test
	public void run3() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();

		// 内连接的写法
		Query query = session.createQuery(" from Customer c inner join fetch c.linkmans ");
		// 默认的返回值是数组
		List<Customer> list = query.list();
		// 手动解决,编程中都使用这种方式解决数据重复问题
		Set<Customer> set = new HashSet<Customer>(list);
		for (Customer customer : set) {
			System.out.println(customer);
		}

		tx.commit();
	}

源码下载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值