hibernate 性能优化之 1+N 问题

1. 注意 session.clear()的运用,尤其在不断分页查询的时候
  a) 在一个大集合中进行遍历,遍历 msg,去除其中的含有敏感字样的对象
  b) 另外一种形式的内存泄漏

    面试题:Java 有内存泄漏吗?

      语法上没有,因为已经被垃圾回收机制回收了;

      但实际操作中,可能因为Java的操作失误会引起系统的内存泄漏;

      缓存太多没有清除、数据库连接读取未关闭导致的异常等等。
2. 1+N问题
  a) Lazy,设置 fetch=FetchType.LAZY


  b) BatchSize

package com.bjsxt.hibernate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.BatchSize;

@Entity
@BatchSize(size=10) //每次批量取10条数据
public class Category {
  ...
}

  c) join fetch 查询的时候加上 join fetch

List<Topic> li = (List<Topic>)session.createQuery("from Topic t left outer join fetch t.category c").list();

  d)  用 Criteria 接口,会自动进行外连接

List<Topic> li = (List<Topic>)session.createCriteria(Topic.class).list();

1 + N问题如图所示:

jar包链接: https://pan.baidu.com/s/1kVskQgf 密码: ujeh

代码链接: https://pan.baidu.com/s/1i5aDZQ9 密码: s35u

posted @ 2017-04-26 16:28  流年如水烟雨随风  阅读(548)  评论(0编辑  收藏  举报