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$Tw3EVY9N"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-Hk\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
mRiG(@.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
}
1T E/a C&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);
}DlHK`0 customer.setUsername("zhang");
m-](kvp0 System.out.println(icount);
'O/]'p M(Hb"@0 if(++icount%20==0)
7`xw#?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
heeQn.M ReNC0 tx.commit();ITPUB个人空间I{;z/T1B2NLQ1o9m
session.close();
ITPUB个人空间E$f2ey!r]Q
批量更新:
LyhZ
n2G;@L
v0 StatelessSession session=HibernateSessionFactory.getSessionFactory().openStatelessSession();ITPUB个人空间X4G s{_/X
Transaction tx=session.beginTransaction();
\Q'l.Ke7@ xT0
Nr+lWm'DG`YE[6b0 ScrollableResults customers=session.getNamedQuery("findAll").scroll(ScrollMode.FORWARD_ONLY);
DZ2qW/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;MEAl0 session.update(customer); //必须显示的调用update方法ITPUB个人空间q/H-\C1D6Y]q
}
UH+Jfi}0 tx.commit();ITPUB个人空间L A;lV.o_
session.close();
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: