大概如此:不一定说在每个项目中都合适
1、
比如,开了N多文件而没关,比如开了地址池而没清,比如分页读了N多页而没有清内存
2、
对于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的别名