hibernate的抓取策略
2015-04-06 16:45
190 查看
抓取策略主要是指获取连接对象的策略
1.基于xml的抓取策略
基于xml抓取Many-to-one
设置fetch=join后,就会只发一条sql,通过join来完成连接查询,
设置代码如下:
但是fetch=join无法抓取hql中的list,如果需要抓取hql中的list有两种方式:
1.设置one的一端对象的batch-size,此时会通过in加载多条数据,在抓取classroom的时候会一次抓取10条classroom的记录
2.在hql语句中写预抓取(join fetch)
特别注意:使用join fetch查询不支持count(*)的查询
1.基于xml的抓取策略
基于xml抓取Many-to-one
//many-to-one 默认情况下,使用的是延时加载,在使用到classroom时才会加载所以,此时会发出sql加载classroom public void testFetch(){ Session session=null; try { //此时会发三条语句 session=HibernateUtil.openSession(); Student student=(Student) session.load(Student.class, 1); System.out.println(student.getName()+"班级:"+student.getClassroom().getName()+"专业:"+student.getClassroom().getSpecial().getName()); } catch (Exception e) { e.printStackTrace(); } }
设置fetch=join后,就会只发一条sql,通过join来完成连接查询,
设置代码如下:
<many-to-one name="special" column="spe_id" fetch="join"/>
但是fetch=join无法抓取hql中的list,如果需要抓取hql中的list有两种方式:
1.设置one的一端对象的batch-size,此时会通过in加载多条数据,在抓取classroom的时候会一次抓取10条classroom的记录
<class name="ClassRoom" table="t_class" batch-size="10"> <id name="id"> <generator class="native" /> </id> <property name="name" />
2.在hql语句中写预抓取(join fetch)
特别注意:使用join fetch查询不支持count(*)的查询
public void test10(){ Session session=null; try { session=HibernateUtil.openSession(); List<Student> stus=session.createQuery("select stu from Student stu join fetch stu.classroom ") .setParameter(0,"%张%") .setParameterList("ids", new Integer[]{1,2}) .list();
相关文章推荐
- Hibernate的抓取策略
- Hibernate学习手记(8) - 抓取策略
- hibernate之优化抓取(选择抓取策略之通过子查询预抓取集合--实例)
- hibernate抓取策略
- Hibernate学习43 -- 抓取策略3 -- 子查询抓取
- hibernate抓取策略
- Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)
- hibernate抓取策略(转)
- Hibernate 延迟加载(懒加载)与抓取策略
- 【Hibernate 8】Hibernate的调优方法:抓取策略
- Hibernate -- 抓取策略
- hibernate_抓取策略-检索配置
- Hibernate-缓存/懒加载/抓取策略
- hibernate抓取策略
- JAVAWEB开发之Hibernate详解(三)——Hibernate的检索方式、抓取策略以及利用二级缓存进行优化、解决数据库事务并发问题
- 【Java EE 学习 48】【Hibernate学习第五天】【抓取策略】【二级缓存】【HQL】
- Hibernate 抓取策略Fetch
- Hibernate 抓取策略
- Hibernate学习44 -- 抓取策略4 -- 批量抓取(Batch fetching)
- hibernate抓取策略