`
wangtong40
  • 浏览: 248743 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HIbernate 大批量数据处理

    博客分类:
  • ORM
阅读更多

<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> <!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->

<!-- [if !supportLists]-->节 1.01   <!-- [endif]-->HQL 更新 / 删除大批量数据

Transaction transaction = session .beginTransaction();

String hql = "UPDATE UserInfo user set user.username=:username,user.password=:password" ;

Query query = session .createQuery(hql);

query.setString(paramsName[0], paramsValue [0]);

query.executeUpdate();

transaction.commit();

注:使用 HQL 处理大批量数据会直接执行 DML 语句,从而绕过 Hibernate 的上下文和所有高速缓存。

<!-- [if !supportLists]-->节 1.02   <!-- [endif]-->HQL 创建大批量数据

Query q = session.createQuery( "INSERT INTO LostCreditCard(type,number) SELECT c.type,c.number FROM CreditCard c join c.user u" );

int createdObjects = q.executeUpdate();

 

<!-- [if !supportLists]-->节 1.03   <!-- [endif]-->批量更新数据

Hibernate.xml 文件中添加以下内容

< property name = "hibernate.jdbc.batch_size" > 20 </ property >

 

Session session = sessionFactroy.openSession();

Transaction tx = session.beginTransaction();

Query query = session.createQuery()

ScrollableResults cursor = query.scroll( "FROM SettleEnterRecord" ).scroll();

int count = 0;

while (cursor.next()) {

    SettleEnterRecord record = (SettleEnterRecord) cursor.get(0);

record.setIsValid( "2" );

if (++count % 100 == 0) {

              session.flush();

              session.clear();

           }

       }

tx.commit();

session.close();

<!-- [if !supportLists]-->节 1.04   <!-- [endif]-->批量插入数据

Session session = sessionFactroy.openSession();

Transaction tx = session.beginTransaction();

for ( int i = 0 ; i < 100000; i ++){

              Item item = new Item ();

              session.save(item);

              if (i%100 == 0){

                  session.flush ();

                  session.clear ();

              }

           }

tx.commit();

session.close ();

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics