Hibernate查询缓存中的1+N

查询缓存查找实体对象:

session.beginTransaction();
			/**
			 * 如果查询的是实体对象,在查询缓存中缓存的是实体对象的ID列表,而实体对象本身被放到了二级缓存中,所以查询缓存需要配合二级缓存一起使用。
			 * 假如二级缓存没有启用,将导致即使是list操作也会发出n条查询语句去查询实体对象!	 */
			String hql = "select p from Person p";
			List persons = session.createQuery(hql)
				.setCacheable(true) //允许查询缓存!
				.list();
			for (Iterator iterator = persons.iterator(); iterator.hasNext();) {
				Person cp = (Person) iterator.next();
				System.out.println(cp.getId()+","+cp.getName());
			}
			session.getTransaction().commit();
		}catch(Exception e){
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally{
			//session关闭之后,当前session对象中的一级缓存已经被清空
			session.close();
		}
		Session session2 = HibernateUtil.openSession();
		try{
			session2.beginTransaction();
			String hql = "select p from Person p";
			List persons = session2.createQuery(hql)
				.setCacheable(true) //允许查询缓存!
				.list();
			for (Iterator iterator = persons.iterator(); iterator.hasNext();) {
				Person cp = (Person) iterator.next();
				System.out.println(cp.getId()+","+cp.getName());
			}
			session2.getTransaction().commit();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值