`

二十二、 1+N 问题

 
阅读更多

问题的来源:

在@ManyToOne中,由于默认的fetch=FetchType.EAGER,所以如下的代码

List<Topic> topics = session.createQuery("from Topic").list();

本来只发一条sql就能查询出所以的Topic对象,结果Topic所关联的Catagory对象也会马上查询出来,而且如果有N个Topic对象,就会再发N条sql去查询Catagory对象。

 

解决办法:

1、@ManyToOne(fetch=FetchType.LAZY)
    //fetch=FetchType.LAZY 解决N+1问题 说明如下:
    //当多对一(@ManyToOne)已经设定属性" fetch=FetchType.LAZY "时
    //只有当需要时(如:t.getCategory().getName()时)才会去获取关联表中数据 可以解决N+1问题
2、@BatchSize
    //@BatchSize 解决N+1问题 说明如下:
    //在与查询表(此例中为Topic类)关联的表类(此例中为Category类)头处加@BatchSize(size=5)
    //表示每次可查出5条记录 从而减少了select语句的个数
3、join fetch(使用join fetch后返回的是一种对象(List<Topic>),而不是像只使用join 返回多种对象List<Ojbect[]>)
    //join fetch 解决N+1问题 说明如下:
    //修改hql语句为--"  from Topic t left join fetch t.category c  "
4、QBC
    //QBC(Query By Criteria) 解决N+1问题 说明如下:
    //使用QBC的 createCriteria(*.class)执行查询 也可避免N+1问题

分享到:
评论

相关推荐

    并行计算课程设计(代码+执行文件+文档)

    蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。本次大作业主要是对...

    并行计算课程设计(报告+代码+可执行文件)

    蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。本次大作业主要是对...

    java 经典习题.doc

    1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 【程序12】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%; 利润高于10万...

    关于二项式系数的一个计数问题* (1994年)

    对任意给定的素数p和非负整数N,给出了边长为N的杨辉三角形所含的百1/2(N十1)(N+2)个二项式系数(nr),n=0,1,…,N;r=0,1, …,n中与p互素者之个数fr(N)的精确 计算公式,即有fr(N)=1/2 k∑i=0 ai kⅡj=i (aj+1))...

    tsp问题遗传0算法~~~MATLAB 仿真

    %TSP问题的解法。包含4部分。本部分为主程序;另外roadlength.m为路径长度函数;roadlength.m为最优路径的函数;还有d.mat为距离矩阵。 NIND=400; %个体数目 MAXGEN=100; %最大遗传代数 N=16; %变量的维数(中间节点...

    最新JAVA编程题全集_50题及答案

    =N*(N-1)*(N-2)*...*2*1; long digui(int i) {if(i==0||i==1) { return 1; } else { return i*digui(i-1); } } 4. 写一个单例模式(遇到两次) public class Test { private Test(){} ...

    算法重的统计数字问题代码

    2、编程任务:给定表示书的总页码的十进制整数N(1&lt;=N^9),计算书的全部页码中分别用到多少次数字0,1,2,……,9。 3、数据输入:输入数据由文件名为INPUT.TXT的文本文件提供。每个文件只有1行,给出表示书的总...

    哈夫曼编码实验报告.doc

    1. 实验目的与要求 运用C++编写程序,解决哈夫曼编码问题。 2. 实验内容 哈夫曼树定义: 设二叉树共有n个端点,从二叉树第k个端点到树的根结点的路径长度l(k)为该端结点( 或叶子)的祖先数,即该叶子的层数减1。...

    机器学习使用python实现一个二分类问题:逻辑与(AND)的一般问题.zip

    1.构建一个二分类问题:逻辑与(AND)的一般问题。 2.生成 500 个数据点(x, y), y = x + n, n 为均值为 0 标准差为 delta 的正态分布。请使用线性回归算法从输入 x 估计 y。 3.一个带有 bias 的基础的 3-3-1 网络反向...

    C 程序指导书及实践指导

    ((2n-1)xpn-1(x)-(n-1)pn-2(x))/n (n&gt;1) , [ 分析讨论] 1. 小结函数的定义及调用方法。 2. 小结函数中形参和实参的结合规则。 实验七 函数(2) [目的与要求] 1、 掌握C语言函数定义及调用的规则。 2、 理解...

    北理大学计算机实验基础-实验十五报告.doc

    五、实验报告 学号: 姓名: 班级:实验时间: 年 月 日 实验报告:用计算机解题——算法 一、请画出实验内容1"真假话问题"计算机求解算法的流程图。 ——————————————————————————————...

    上海电机学院C语言实训答案

    输入一个正整数n (1&lt;n),再输入n 个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n 个数。 (25)抓住肇事者 一辆卡车违反交通规则,撞人后逃跑。现场共有三个目击者,但都没有记住车号...

    《数据结构 1800题》

    有 5种表示方式:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1。 ①以下是该函数的程序段,请将未完成的部分填入,使之完整 int f(m,n) int m,n; { if(m==1) return (1) ; if(n==1){ return (2) ;} if(m&lt;n) {...

    课程设计实验——八皇后_VC++游戏

    该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。  高斯认为有76种方案。1854年在柏林的...

    实验十五-实验报告表.doc

    五、实验报告 学号: 姓名: 班级: 实验时间: 年 月... 开始 I=1 j=2 I=i-1 J=j-1 ai=c ai=ai-1 ai-1=c ai&lt;ai-1 i-1=0 ai=c ai=aj aj=c 结束 输出a1=an I=n i=j j=j+1 a1实验十五-实验报告表全文共2页,当前为第2页。

    C语言中常见问题的算法与程序总结

    二十二、欧拉数 14 二十三、欧拉的其他公式 15 二十四、欧拉方程 15 二十五、勾股数的特点 16 二十六、勾股数系的系和组 17 二十七、勾股数系的性质 17 二十八、二元一次不定方程 18 二十九、中国同余式 18 三十、...

    成绩排序问题

    成绩综合排名问题 1. 4个班级上数计结构。期末后,分别录入各班成绩,并按成绩降序存储,请将4个班级的所有人成绩降序存储并输出。 本质:线性表的建立与合并 1.存储结构: ----线性表{链表,顺序表} 数据元素&lt;班...

    猴子吃桃是一个经典的数学问题 问题描述如下:有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个 以后每天猴子都吃其中的一半

    // 第十天剩下的桃子数量 // 从第九天开始逆推,计算每天剩下的桃子数量 for (int i = days - 1; i &gt;= 1; i--) { peaches = (peaches + 1) * 2; } printf("最初有 %d 个桃子\n", peaches); return 0; }

    天津理工大学中加专业数据结构实验一:线性结构应用 (完整报告+代码)

    1)问题描述:将从键盘输入的十进制数转换为N(如二进制、八进制、十六进制)进制数据。 2)实验要求: 利用顺序栈实现数制转换问题 3) 实现提示:  转换方法利用辗转相除法;  所转换的N进制数按低位到高位的顺序...

    数据结构(C++)有关练习题

    内容及步骤: 1、 设有一个线性表(e0,e1,e2,e3,…,en-2,en-1)存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原地址内容置换为(en-1,en-2,…,e3,...

Global site tag (gtag.js) - Google Analytics