1、session.clear()的运用,尤其在不断分页循环的时候
2、1+N问题:
@ManyToOne(fetch=FetchType.LAZY) //设置成fetch=FetchType.LAZY并不是不发另外的N条sql语句,而是按需而发,需要用到的时候才发
3、Hibernate的一级缓存、二级缓存和查询缓存问题:
一级缓存:session级别的缓存(session私有的,不能跨session共享,默认就是session缓存)
二级缓存:可以理解为sessionFactory级别的缓存(所有session共享的缓存,可以跨session使用,在hibernate配置文件中设置。如果要将某个类的对象加入到二级缓存,可以在该类上加上@Cache(usage=CacheConcurrencyStrategy.Read_Write)注解)
打开二级缓存:在hibernate配置文件中添加配置
<property name="cache.use_second_level_cache">true</property>
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
load默认使用二级缓存数据,iterate默认使用二级缓存
list默认往二级缓存加数据,但是查询的时候不使用
如果query要使用二级缓存,需要打开查询缓存(查询缓存依赖于二级缓存,如果二级缓存没有打开,无法使用查询缓存)
设置查询缓存:
1.在hibernate配置文件中加入<property name="cache.use_query_cache">true</property>
2.在程序中加入Query.setCacheable(true)