hibernate一对多关系 在一方查询会获得重复数据,重复数量就是多端数据数量用@Fetch(FetchMode.SUBSELECT)解决
先来看数据表
版块表只有两个数据

板块1是推荐,下边没有子栏目
板块2下边有14个子栏目
在1的一端来查询,发现结果有16条
也就是板块1+版块2+版块2和他的14个子集都列出来了,这明显不对

板块对象的配置
@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@JoinColumn(name = "sectionId")//ColumnMoDel中的外键,用于关联
猜测了一下,是急加载导致的
查需语句为
Hibernate:
select
this_.id as id1_17_1_,
。。。。from
t_section this_
left outer join
t_column columnmode2_
on this_.id=columnmode2_.sectionId
Hibernate:
select
columnmode0_.id as id1_7_,
。。。。from
t_column columnmode0_
where
columnmode0_.sectionid=''
删除这个策略配置为
@OneToMany(cascade = {CascadeType.ALL})
@JoinColumn(name = "sectionId")//ColumnMoDel中的外键,用于关联
或者使用懒加载
@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
@JoinColumn(name = "sectionId")//ColumnMoDel中的外键,用于关联
可以解决这个数据集重复的问题
但是,这样又获取不到多方的集合
看起来问题并不能这样解决
经过查询得知,使用 @Fetch可以解决这个问题
@OneToMany(cascade = {CascadeType.ALL})
@JoinColumn(name = "sectionId")//ColumnMoDel中的外键,用于关联
@Fetch(FetchMode.SUBSELECT)
在控制台得知,发出的是两条查询
Hibernate:
select
this_.id as id1_17_0_,
。。。。。from
t_section this_
Hibernate:
select
columnmode0_.id as id1_7_,
。。。。from
t_column columnmode0_
where
columnmode0_.sectionid=''
如果注解再改一下
@OneToMany(cascade = {CascadeType.ALL},fetch = FetchType.EAGER)
@JoinColumn(name = "sectionId")//ColumnMoDel中的外键,用于关联
@Fetch(FetchMode.SUBSELECT)
语句又变了
Hibernate:
select
this_.id as id1_17_0_,
。。。。from
t_section this_
Hibernate:
select
columnmode0_.sectionId as sectionI7_17_1_,
。。。。from
t_column columnmode0_
where
columnmode0_.sectionId in (
select
this_.id
from
t_section this_
)
至于查询效率问题,目前暂无时间处理,有时间再用分析器测试,不过从语句上来分析,@Fetch(FetchMode.SUBSELECT)配合急加载肯定不如搭配懒加载快
hibernate一对多关系 在一方查询会获得重复数据,重复数量就是多端数据数量用@Fetch(FetchMode.SUBSELECT)解决的更多相关文章
- [NHibernate]一对多关系(关联查询)
目录 写在前面 文档与系列文章 一对多查询 总结 写在前面 上篇文章介绍了nhibernate的一对多关系如何配置,以及级联删除,级联添加数据的内容.这篇文章我们将学习nhibernate中的一对多关 ...
- Hibernate一对多关系操作
1.创建两个实体类. 一个实体类是商品类,另一个实体类是商品的分类类. 在一对多关系的两个实体中,在编写实体类时必须要遵循以下规则: (1)在一的那一方的实体中,必须要有一个私有的多那一方的实体对象属 ...
- 11.Hibernate一对多关系
创建JavaBean 一方: Customer private long cust_id; private String cust_name; private long cust_user_id; p ...
- 菜鸟学习Hibernate——一对多关系映射
Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创 ...
- hibernate一对多关系配置
一. 表信息 公司表 cId cName cAdress Null Null Null 表t_company 员工表 sId sName sAge cId Null Null Null Nul ...
- hibernate 一对多关系中的孤儿属性
@OneToMany(targetEntity = BenefitType.class, mappedBy = "sitePerson",cascade = CascadeType ...
- mybatis一对多关系的关联查询
问题描述:实现两张表的关联查询 学生表: 班级表: 要实现学生管理信息中有所在班级的名称,即如下图所示 1.对应学生表的pojo类写全班级表中的字段(适用于要连接的表字段较少的情况) sql语句直接在 ...
- hibernate一对多关系映射(自身关联)
示例:一个类别(Category)下面有多个子类别,多个子类别属于同一个父类别. public class Category { private Integer id; private String ...
- Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)
One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...
随机推荐
- idea从github中pull或者push成功之后tomcat启动不了,报Error....
解决方案:删除deployment里面的war包,确定. 再在deployment里面重新添加一个war包,确定,即可.
- UVA 511 Do You Know the Way to San Jose?
题目链接:https://vjudge.net/problem/UVA-511 题目翻译摘自<算法禁赛入门经典> 题目大意 有 n 张地图(已知名称和某两个对角线端点的坐标)和 m 个地名 ...
- Linux权限命令chmod
一.Linux chmod命令修改文件和文件目录权限(默认情况下只有root用户才能使用).命令格式:chmod+修改内容+要修改的文件或者 目录 或者 chmod -R 修改内容 要修改的文件或者 ...
- JS数组 了解成员数量(数组属性length) myarr.length
了解成员数量(数组属性length) 如果我们想知道数组的大小,只需引用数组的一个属性length.Length属性表示数组的长度,即数组中元素的个数. 语法: myarray.length; //获 ...
- JS规则 较量较量(比较操作符) 两个操作数通过比较操作符进行比较,得到值为真(true)和假(false)。【>; <; >=; <=; !=;==】
较量较量(比较操作符) 我们先来做道数学题,数学考试成绩中,小明考了90分,小红考了95分,问谁考的分数高? 答: 因为"95 > 90",所以小红考试成绩高. 其中大于号& ...
- spring:bean的细节之三种创建Bean对象的方式
<!--创建Bean的三种方式--><!--第一种方式,使用默认构造函数创建 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有属性和标签时. 采用的就 ...
- 【数位DP】[LOJ10163]Amount of Degrees
发现自己以前对数位DP其实一窍不通... 这题可以做一个很简单的转换:一个数如果在$b$进制下是一个01串,且1的个数恰好有k个,那么这个数就是合法的(刚开始没判断必定是01串,只判断了1的个数竟然有 ...
- FileCloud 的原理简述&自己搭建文件云
FileCloud 的原理简述&自己搭建文件云 copyright(c) by zcy 关于如何使用IIS创建asp服务,请读者自行研究 注:不要忘记添加入站规则 代码的存储: 根目录 fil ...
- [记录]Wdinwos scikit-learn 安装
安装的软件有: Python: 3.6.0 numpy-1.11.3+mkl-cp36-cp36m-win_amd64.whl(全名) scipy-0.19.0-cp36-cp36m-win_amd6 ...
- CSS - 定位相关
定位 (position) 1. 相对定位 (relative) 相对于元素原来的位置进行移动 2. 绝对定位 (absolute) 如果父级元素中有相对定位属性, 则参照父级元素进行定位, 默认参照 ...