rotman173 发表于 2013-2-1 11:12:17

hibernate性能优化备忘录

1、注意session.clear()的运用,尤其在不断分页循环的时候
a)  另外一种形式的内存泄露  ( Java有内存泄漏吗?语法上没有,但是可由java引起,例如:连接池不关闭,或io读取后不关闭)
2、1+N问题
      a) @ManyToOne(fetch=FetchType.LAZY)
       fetch=FetchType.LAZY 解决N+1问题 说明如下:
        当多对一(@ManyToOne)已经设定属性" fetch=FetchType.LAZY "时
       只有当需要时才会去获取关联表中数据 可以解决N+1问题
b)@BatchSize
       //@BatchSize 解决N+1问题 说明如下:
       //在与查询表关联的表类头处加@BatchSize(size=5)
       //表示每次可查出5条记录 从而减少了select语句的个数
c) join fetch
       //join fetch 解决N+1问题 说明如下:
       //修改hql语句为--"  from xxx  left join fetch xxx "
d)QBC
       //QBC(Query By Criteria) 解决N+1问题 说明如下:
       //使用QBC的 createCriteria(*.class)执行查询 也可避免N+1问题
3 、list和iterate不同之处a)         list取所有
b)iterate先取 ID,等用到的时候再根据ID来取对象
c) session中list第二次发出,仍会到数据库査询
d)iterate 第二次,首先找session 级缓存
页: [1]
查看完整版本: hibernate性能优化备忘录