栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Hibernate中运行多个查询的模型类。

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Hibernate中运行多个查询的模型类。

hibernate关系适用于不同的提取策略.. !!

Hibernate提供了4种检索数据的策略:

选择

@oneToMany(mappedBy="tableName", cascade=CascadeType.ALL)@Column(name="id") @Fetch(FetchMode.SELECT)

在此方法中,将触发多个SQL。为检索父表中的所有记录而触发第一个。其余的被解雇以获取每个父记录的记录。这基本上是N +
1问题。第一个查询从数据库中检索N条记录,在本例中为N条父记录。对于每个父级,一个新查询将检索子级。因此,对于N个父对象,N个查询从子表中检索信息。

加入

@oneToMany(mappedBy="tableName", cascade=CascadeType.ALL)@Column(name="id")@Fetch(FetchMode.JOIN)

这与SELECT提取策略相似,不同之处在于所有数据库检索均在JOIN提取中预先进行,而SELECT则是根据需要进行的。这可能成为重要的性能考虑因素。

子选择

 @oneToMany(mappedBy="tableName", cascade=CascadeType.ALL) @Column(name="id") @Fetch(FetchMode.SUBSELECT)

将触发两个SQL。一种检索所有的Parent,第二种使用WHERe子句中的SUBSELECT查询来检索所有具有匹配父ID的子。

批量

@oneToMany(mappedBy="tableName", cascade=CascadeType.ALL)@Column(name="id")@@BatchSize(size=2)

批处理大小映射到检索其子级的父级数。因此我们可以指定一次要获取的记录数,但是将执行多个查询!

一对多和多对多允许-连接,选择和子选择

多对一和一对一允许-加入并选择


Hibernate还可以区分(何时获取关联)

1. 立即提取 -

加载父项后,将立即获取关联,集合或属性。(惰性=“假”)

2. 延迟集合获取 -

当应用程序对该集合调用操作时,将获取一个集合。(这是集合的默认设置。(lazy =“ true”))

3.“ 超懒惰 ”集合的获取-

可以根据需要从数据库中访问集合的各个元素。除非绝对必要,否则Hibernate尝试不将整个集合获取到内存中(适用于非常大的集合)(lazy =“
extra”)

4. 代理获取 -

当在关联对象上调用除标识符getter之外的方法时,将获取单值关联。(懒惰=“代理”)

5.“ 无代理 ”获取-

访问实例变量时,将获取单值关联。与代理获取相比,此方法比较懒惰。(lazy =“ no-proxy”)

6. 懒惰的 属性获取-

访问实例变量时,将获取属性或单值关联。(懒惰=“ true”)

一对多和多对多允许立即,懒惰,超懒惰

多对一和一对一允许立即代理,无代理



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435890.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号