`
- 浏览:
109246 次
- 性别:
- 来自:
农村进城务工人员
-
以下涉及的几个问题是在实际开发中经常或碰到的,大家也渐渐形成了所谓的“最佳实践”,不过还存在一些问题,没有好的方案,请大家一起探讨。
1、是否延迟加载
为了保持较好的性能,通常我们会选择延迟加载关联对象,这一点在one-to-many、many-to-one中体现最深。然而在下列情形中我们可能需要立刻加载关联的对象:
有一个Topic表,一个Comment表,Topic有一些统计信息例如浏览次数、回复次数、最后回复时间(回复者),这些信息是需要在查询Topic时立刻加载的。通常有两种方案:
1)将这些信息保存在Topic中,即topic表中含有这些统计信息字段。
这种设计的问题:这些统计信息需要经常修改,例如有了新的回复,这会引起对topic表的更新,由于topic表的内容较多(含有text类型的字段),更新时性能影响较大。
2)将这些统计信息单独放在另一张表topic_stat。
由于要立刻加载这些统计信息,所以要使用one-to-one主键关联,即将topic的主键作为topic_stat的主键,但是很不幸,这里又引起了另一个问题:每次对topic的分页查询都会再发送n个sql去查询关联的topic_stat,也就是n+1问题;而查询指定id的topic会使用left out join的方式抓取关联的topic_stat。所以这里的瓶颈是n+1问题。
所以以上两种方案都不是理想的方案,有人提出使用唯一外键关联的方式避免n+1问题,但是这种方式会lazy加载关联对象,在需要立刻加载关联对象的情景下(如topic需要立刻加载topic_stat),这种方法是不适用的(对于不需要立刻加载而体现为一对一关系的情况下,唯一外键关联是一种很好的方案)。
2、OpenSessionInView
针对需要立刻加载,而又想避免由于使用one-to-one主键关联引起n+1查询的问题,有人提出使用OpenSessionInView方法,这种方法也是可以接受的方案,但是由于session的打开是在请求到来就开始,视图渲染完毕之后才关闭,这中间的时间间隔较大,对于数据库访问频繁的应用来讲,不是一种好的方案。
结合上面的讨论,我想大家都有各自的看法,请大家分享一下。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的...
Hibernate 一对一外键单向关联 Hibernate 一对一主键单向关联 Hibernate 一对一连接表单向关联 Hibernate 一对多外键单向关联 Hibernate 一对多连接表单向关联 Hibernate 多对一外键单向关联 Hibernate 多对一连接...
该资源包含了一些常用的hibernate关联映射实例。包括一对多,多对多,继承映射,等,是学习hibernate的必备品
hibernate关联查询 实例源码 java web 如果不明白hibernate关联查询不明白的可以看看,保证马上学会,注释,数据库都有,很简单易学的源码,谢谢下载!
hibernate关联关系
Hibernate关联关系练习【全】
映射一对多关联关系 以Customer和Order为例: 一对多: 每个Customer可以有一个或者多个Order,因此Customer中应该有一个集合类型的属性,来引用所有关联的Order对象。 多对一。全实例讲解
Hibernate关联关系映射 单向关联 │ ├─ 一对一外键单向关联 │ ├─ 一对一主键单向关联 │ ├─ 一对一连接表单向关联 │ ├─ 一对多外键单向关联 │ ├─ 一对多连接表单向关联 │ ├─ 多对一外键单向关联 │ ...
Hibernate 关联关系映射分类
详细讲解hibernate的关联关系,以及用实例讲解,非常详细
关于对Hibernate关联映射的一个总结,其中有各种映射的例子,详细用法 等
Hibernate数据关联映射与继承策略.rar
常用Hibernate主键生成策略 常用Hibernate主键生成策略 常用Hibernate主键生成策略 常用Hibernate主键生成策略
介绍了HIBERNATE的检索策略,可以此作为指引进行学习
Hibernate关联关系.docHibernate关联关系.doc
文件中包含关于hibernate 各个属性的解释
Hibernate关联关系总结 一对多 多对一 多对多
大致总结了一下Hibernate关联关系。提供相关的一些例子进行测试。