Hibernate 性能优化_1

大概如此:不一定说在每个项目中都合适

 

1、 使用session.clear(),虽然说java有垃圾回收机制,但在实际应用中,还是存在着很多内存溢出

比如,开了N多文件而没关,比如开了地址池而没清,比如分页读了N多页而没有清内存

 

2、 1+N问题

对于ManyToOne,如果设为FetchType=Eager,则会产生1+N的问题(当然,OneToMany一般都是Lazy)

1+N问题为:如果我取10条记录,那么Hibernate就会再去找这10条记录对应的"One"的对象

 

解决办法,3种:

a)   在ManyToOne处设为Lazy后,暂时不发,啥时要用啥时就发SQL去找这个One对象

b)   在One的对象上,设 @BatchSize(size=5),这样,查10条记录时,虽然Hibernate会再去查这10条记录

      对应的"One",但会分10/5=2次去取,就是说,一次取5条记录,共发2条SQL

c)   改HQL, 原来的" FROM 对象 " 改为 " FROM A a LEFT JOIN fetch a.b c  " 这里c为a.b的别名

 

 

 

 

你可能感兴趣的:(Hibernate)