回忆初学的时候开发hibernate有n多误区,大概列列以后想到再更新
1.性能误区
当我们调试的时候经常发现打印hql是n+1个查询,于是觉得1个查询比n+1个执行效率要高,特别是在初学调试的时候没开启二级缓存很明显。
其实,随着二级缓存的使用,和更多的并发,使用原生方法性能会优化很多。
当然也可以用hql和自定义的缓存策略。
2.一对多可能出现的错误
could not initialize proxy – no Session
一对多的时候设置FetchType.LAZY可能出现
网上解释有:
不使用LAZY,这个不太靠谱就不说了,而且产生连表查询,可能影响性能
靠谱的方式是web.xml设置OpenSessionInViewFilter
同时需要注意的还有要用 Hibernate 管理session
使用 SessionFactory.getCurrentSession 而不是 openSession
使用后不用手动关闭sessin,Hibernate会自己控制。
否则自己关闭了session就会报no Session的错误
同时 junit4中使用lazy测试也是可以的,不需要web.xml的OpenSessionInViewFilter配置
其他的想到再补