怎样做instergram网站营销,体育彩票网站开发该做哪些步骤,现在流行用什么做网站,提供响应式网站建设9) hibernate.batch_fetch_style: 该配置是hibernate4.2.0新添加的#xff0c;使用这个设置可以配置hibernate在做batch-fetch的时候#xff0c;生成SQL的策略。该配置项的可选值为org.hibernate.loader.BatchFetchStyle这个枚举类型中的可选值。所以#xff0c;目前有三个选… 9) hibernate.batch_fetch_style: 该配置是hibernate4.2.0新添加的使用这个设置可以配置hibernate在做batch-fetch的时候生成SQL的策略。该配置项的可选值为org.hibernate.loader.BatchFetchStyle这个枚举类型中的可选值。所以目前有三个选项LEGACYPADDED和DYNAMIC。下面分别介绍 1LEGACY该批量抓取样式从一个预定义的数组中获取指定的匹配的个数来包装in后面的问号的个数这个预定义的数组由org.hibernate.internal.util.collections.ArrayHelper#getBatchSizes 方法得到的。LEGACY也是该配置项的默认值。举一个简单的例子假如向数据表中插入39条数据 Before
public void save() {
for (int i 0; i 39; i) {
Department d new Department();
d.setName(d i);
Employee enew Employee();
e.setName(ei);
e.setDept(d);
Session session HibernateUtil.getInstance().getSession();
session.beginTransaction();
session.save(d);
session.save(e);
session.getTransaction().commit();
session.close();
}
} 如果要批量获取batch-fetch大小设置为14 Test
public void testBatchFetch() {
Session session HibernateUtil.getInstance().getSession();
List emps session.createQuery(FROM Employee).list();
for (Employee emp : emps) {
System.out.printf(employee:%s belong %s department \r\n,
emp.getId(), emp.getDept().getName());
}
session.close();
} 得到所有的Employee并遍历访问Employee对应的Department批量大小设置为14 class nameDepartment batch-size14
id nameid
generator classnative /
/id
property namename /
set nameemps
key columnDEPT_ID/
one-to-many classEmployee/
/set
/class 在hibernate.properties文件中配置 hibernate.batch_fetch_style LEGACY 运行测试输出内容简化之后 Hibernate: select employee0_.id as id1_1_, employee0_.name as name2_1_, employee0_.DEPT_ID as DEPT3_1_ from Employee employee0_ Hibernate: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from Department department0_ where department0_.id in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) employee:1 到 employee:14 Hibernate: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from Department department0_ where department0_.id in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) employee:15 到 employee:28 Hibernate: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from Department department0_ where department0_.id in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) employee:28 到 employee:38 Hibernate: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from Department department0_ where department0_.id? employee:39 可以很清楚的看出在连续使用14批量拿了两次数据之后并没有直接把最后一个批量的数据11个一次性的拿出来而是分别使用了101的方式分了两次拿到数据。原理分析如下 首先根据设置的batch-size14把14作为最大的batch数传给org.hibernate.internal.util.collections.ArrayHelper#getBatchSizes方法得到一个预处理的数组为[14,10,9,8,7,6,5,4,3,2,1]换句话说能够放到IN后面的批量的数字只能是这个数组中的某一个值所以第一次取3914取最大批量14第二次取2514取最大批量14第三次取1114所以只能取第二大的1110取10批量最后一次取取1个。这种策略就很清晰了。 2PADDED该方式和LEGACY一样从一个预定义的数组中获取指定的匹配的个数来包装in后面的问号的个数这个预定义的数组由org.hibernate.internal.util.collections.ArrayHelper#getBatchSizes 方法得到的。和LEGACY不同的是当余下的数量不够的时候该方式总会选择一个大于当前匹配批量的数量。相同的示例我们修改批量样式为 hibernate.batch_fetch_style PADDED 运行测试控制台输出简化之后): Hibernate: select employee0_.id as id1_1_, employee0_.name as name2_1_, employee0_.DEPT_ID as DEPT3_1_ from Employee employee0_ Hibernate: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from Department department0_ where department0_.id in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) employee:1 到employee:14 Hibernate: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from Department department0_ where department0_.id in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) employee:15 到employee:28 Hibernate: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from Department department0_ where department0_.id in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) employee:29 到employee:39 可以清楚的看出PADDED和LEGACY的区别PADDED只使用了3次批量就取出了所有的数据取值流程为 首先根据设置的batch-size14把14作为最大的batch数传给org.hibernate.internal.util.collections.ArrayHelper#getBatchSizes方法得到一个预处理的数组为[14,10,9,8,7,6,5,4,3,2,1]换句话说能够放到IN后面的批量的数字只能是这个数组中的某一个值所以第一次取3914取最大批量14第二次取2514取最大批量14第三次取1114但是PADDED会选择比10大1的数量即选中14然后用14把剩下的11个对象一次性的取出来了。 3DYNAMIC有多少数量就直接使用一个批次全部拿出来但是还是不能超过设置的batch-size。所以很好理解如果使用DYNAMIC也会使用141414的方式分3次批量的把数据查询出来。 最后可能有同学觉得使用PADDED更大的batch-size就行了其实也不是这样因为毕竟是批量的去获取关联的数据如果关联的数据过大特别是批量的获取集合数据得到的结果集越大性能也会慢下来所以根据具体的应用需求合理的设置批量SQL样式和批量大小也是需要慎重考虑的。 转载于:https://www.cnblogs.com/james1207/p/3275405.html