在hibernate2.0的处理方法为 下面的代码
在hibernate的配置文件中添加
hibernate.jdbc.batch_size=20
批量处理的方法为
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) {
//flush 插入数据和释放内存:
session.flush(); session.clear(); }
}
tx.commit();
session.close();
这样属于批量插入吗?貌似根本没有batch来处理嘛,jdbc里面是先加入到batch里面,然后再提交的。
- public void createRolePermissionBySql(final String roleId,final String[] permIds){
- getHibernateTemplate().execute(new HibernateCallback() {
- public Object doInHibernate(Session session)
- throws HibernateException, SQLException {
- if(permIds==null||permIds.length==0)
- return null;
- Connection conn=session.connection();
- PreparedStatement ps=null;
- String sql=" insert into base_role_permission (ROLE_PERM_ID,PERM_ID,ROLE_ID,CREATE_DATE)" +
- " values (?,?,?,?) ";
- ps=conn.prepareStatement(sql);
- if(log.isDebugEnabled())
- log.debug("batch add base_role_permission:"+sql);
- UUIDHexGenerator uuidGenerator=null;
- for(String permId:permIds){
- uuidGenerator=new UUIDHexGenerator();
- ps.setString(1,uuidGenerator.generate(null, null).toString());
- ps.setString(2,permId);
- ps.setString(3, roleId);
- ps.setDate(4, DateUtils.getJavaSqlDate());
- ps.addBatch();
- }
- int[] counts=ps.executeBatch();
- ps.close();
- session.flush();
- session.close();
- return null;
- }
- });
- }