Hibernate 优化

上一篇 / 下一篇  2008-05-10 19:17:57 / 个人分类:hibernate

最好将batch size 设置为一个适当的值一般为30-50,在大量插入的时候停止一级缓存,
$O?"b#P:B-[iE/n,\a0   否则有可能引起内存溢出,或者每组flush一次,之后清空即可。
Sr{f;VH-^0        在批量更新,检索时注意使用游标ScrollableResults,可以很大的提高系统效率,如果ITPUB个人空间l$Tw3E VY9N"r4@
   直接使用session可能会造成内存的溢出。
Hl5zXsS0   ITPUB个人空间"l,O/i0}y;? qn
     大量数据的插入:ITPUB个人空间 mprQO9y$C_ ?1N
 Transaction tx=null;ITPUB个人空间RD E(gn#v!Z
  Session session=null;
T'q'X-H k\0  session=HibernateSessionFactory.getSession();ITPUB个人空间9Ny!G4Pk`wn2l;A'@s
  tx=session.beginTransaction();ITPUB个人空间+k&fJ7jM)^t7L!r2v#Y
  //String time1=new Date().toLocaleString();
jfytt0  for(int i=0;i<100000;i++)ITPUB个人空间(T _-?CF/\J'y|
  {ITPUB个人空间OsI#Y;|$fU3`$D
   Customer customer=new Customer();ITPUB个人空间a+cj?;{%B2m#m(]
   customer.setUsername("zhang");ITPUB个人空间G mRi G(@.S'Z#uU
   customer.setPassword("zhang");
0^AN.R|%S*m0   if(i%20==0)
T$q M5wh,t ke0   {ITPUB个人空间5k2XSwho!t
    session.flush();ITPUB个人空间 \$MhV6U8u
    session.clear();ITPUB个人空间 Zu1pDB
   }
1TE/aC&r*II+r0   session.save(customer);ITPUB个人空间u6FDd+Bs
   System.out.println(i);
9P$R*{jowO N [2H0  }
7m$Yvz!fk"r0  tx.commit();ITPUB个人空间-f z/H)`}"_tc"h~,k
  //String time2=new Date().toLocaleString();ITPUB个人空间8K SO3t\ m
  session.close();

     批量更新:
i/mUP w a/a+f0           Session session = this.getSession();ITPUB个人空间kuEd_
  Transaction tx=session.beginTransaction();
gt.s.A7Qd ^+G0  ScrollableResults customers = session.createQuery("select customer from Customer customer").setCacheMode(CacheMode.IGNORE)
@{OOnN$T-m0    .scroll(ScrollMode.FORWARD_ONLY);ITPUB个人空间(id_IxuZ9[k,co?
  int icount=0;ITPUB个人空间F7_'x \6P:ZH
  while(customers.next())ITPUB个人空间 \Z7Z-J*N8{1sw v
  {
1n~6N V5r"z0   Customer customer=(Customer)customers.get(0);
}Dl HK`0   customer.setUsername("zhang");
m-](kvp0   System.out.println(icount);
'O/]'p M(Hb"@0   if(++icount%20==0)
7`x w#?P/~ ]0   {
f4N$HL%^|vK0    session.flush();ITPUB个人空间b4eT-]_RD.O
    session.clear();ITPUB个人空间\^~ANN _| rv
   }
T aqQl!?9c;W0  ITPUB个人空间Lt0\f V%U
   ITPUB个人空间+Aw ]#K(Q ]@,|
  }ITPUB个人空间y.QK7{kxv
  
heeQ n.MReN C0  tx.commit();ITPUB个人空间I{;z/T1B2NLQ1o9m
  session.close();

ITPUB个人空间E$f2ey!r]Q
      批量更新:
LyhZ n2G;@L v0      StatelessSession session=HibernateSessionFactory.getSessionFactory().openStatelessSession();ITPUB个人空间X4Gs{_/X
  Transaction tx=session.beginTransaction();
\Q'l.Ke7@ xT0  
Nr+lWm'DG`Y E[6b0  ScrollableResults customers=session.getNamedQuery("findAll").scroll(ScrollMode.FORWARD_ONLY);
D Z2qW/c}OJ0  int i=0;
0T[RK$r3v"D0  while(customers.next())ITPUB个人空间 k2AbB S O2{3KZH(D
  {ITPUB个人空间tp)o za5n3?
   System.out.println(i++);
k.QD~p|%UA Y0   Customer customer=new Customer();
Q` W2F \$W+E8z0   customer=(Customer) customers.get(0);
4@R8x9od#XP$J0   customer.setPassword("zhang");
+_N;MEA l0   session.update(customer);  //必须显示的调用update方法ITPUB个人空间q/H-\C1D6Y]q
  }
UH+Jfi}0  tx.commit();ITPUB个人空间L A;lV.o _
  session.close();


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-05-17  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 38
  • 日志数: 10
  • 建立时间: 2007-12-21
  • 更新时间: 2008-05-16

RSS订阅

Open Toolbar