posts - 325,  comments - 25,  trackbacks - 0
当首次作Insertupdatedeleteselect时,新产生的object在session关闭之前将自动装载到session级别的缓存区,如果,AP使用了二级缓存,同样也会装入到二级缓存。所以当数据量大时,就会出现outofmemory情况。
1.批理插入
    方式一:
        在hibernate.cfg.xml中设置批量尺寸
        <property name="hibernate.jdbc.batch_size">50</property>
        关闭二级缓存
        <property name="hibernate.cache.use_second_level_cache">false</property>
    Session session=SessionFactory.openSession();
    Transaction tx=session.beginTransaction();
    for(int i=0;i<1000;i++)
    {
        Customer customer=new Customer();
         session.save(customer);
    if(i%50==0)
        {
            session.flush();
            session.clear();
          }
     }
        tx.commit();
        session.close();

方式二:绕过hibernate,直接使用JDBC进行批量插入
        Session session=SessionFactory.openSession();
    Transaction tx=session.beginTransaction();
    Connection conn=session.connection();
    PreparedStatement stmt=conn.prepareStatement("insert into orders(orderno) values (?)");
    for(int i=0;i<1000;i++)
    {
        stmt.setString(1,"a"+i);
        stmt.addBatch();
    }
    stmt.executeBatch();
    ts.commit();
    session.close();
二、批量更新
    hibernate.cfg.xml中配置:
    <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQuetyTranslatorFacotry</property>
    如,批量更新所有顾客联系电话中的空格
 方式一:
   Session session=SessionFactory.openSession();
    Transaction tx=session.beginTransaction();
    Query query=session.createQuery("update Customer set phone=Trim(phone)");
    query.executeUpdate();
    tx.commit();
    session.close();
方式二:绕过hibernate,通过jdbc
    Session session=SessionFactory.openSession();
    Transaction tx=session.beginTransaction();
     Connection conn=session.connection();
    Statment stmt=conn.createSatement();
    stmt.executeUpdate("update Customer set phone=Trim(phone)");
    tx.commit();
    session.close();
三、批量删除
    hibernate.cfg.xml中配置:
    <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQuetyTranslatorFacotry</property>
    如,批量更删除所有ID小于5000的顾客
 方式一:
   Session session=SessionFactory.openSession();
    Transaction tx=session.beginTransaction();
    Query query=session.createQuery("delete Customer where id<5000");
    query.executeUpdate();
    tx.commit();
    session.close();
方式二:绕过hibernate,通过jdbc
    Session session=SessionFactory.openSession();
    Transaction tx=session.beginTransaction();
     Connection conn=session.connection();
    Statment stmt=conn.createSatement();
    stmt.executeUpdate("delete from Customer where id<5000");
    tx.commit();
    session.close();
posted on 2008-05-25 23:01 长春语林科技 阅读(3042) 评论(0)  编辑  收藏 所属分类: hibernate

只有注册用户登录后才能发表评论。


网站导航:
 
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

 

长春语林科技欢迎您!

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

搜索

  •  

最新评论

阅读排行榜

评论排行榜