Hibernate性能优化要点
Hibernate性能优化要点:
1.尽量使用many-to-one,避免使用单项one-to-many
2.灵活使用单向one-to-many
3.不用一对一,使用多对一代替一对一
4.配置对象缓存,不使用集合缓存
5.一对多使用Bag 多对一使用Set
6.继承使用显示多态 HQL:from object polymorphism="exlicit" 避免查处所有对象
7.消除大表,使用二级缓存
对于上面这些,有前辈进行了详细的讲解,在此转载,非常感谢前辈的总结。
one-to-many:
使用inverse=false(default),对象的关联关系是由parent对象来维护的
而inverse=true的情况下,一般用户双向多对多关联,由子对象维护关联关系,增加子对象的时候需要显示:child.setParent(child)
为了提高性能,应该尽量使用双向one-to-many inverse=true,在MVC结构中的DAO接口中应该直接用Session持久化对象,避免通过关联关系(这句话有点不理解),而在单项关系中正确使用二级缓存,则可以大幅提高以查询为主的应用。
多对一性能问题比较少,但是要避免经典N+1问题。
通过主键进行关联,相当于大表拆分小表。(这个是区分面向对象设计和面向过程设计的一个关键点)
list、bag、set的正确运用
one-to-many:
A、使用list 需要维护Index Column字段,不能被用于双向关联,而且必须使用inverse=false,需要谨慎使用在某些稀有场合(基本上是不予考虑使用)
B、bag/set在one-to-many中语义基本相同,推荐使用bag
many-to-one:
A、bag和set不同,bag允许重复插入,建议使用set
在庞大的集合分页中应该使用session.createFilter
session.createFilter(parent.getChildren(),""),setFirstResult(0),setMaxResult(10))
避免N+1
在多对一的情况下,查询child对象,当在页面上显示每个子类的父类对象的时候会导致N+1次查询,需要采用下面的方法避免:many-to-one fetch="join|select"(该方法可能有问题,参考)
inverse=true 无法维护集合缓存(还不是很理解集合缓存和对象缓存)
OLTP类型的web应用,可以群集水平扩展,不可避免的出现数据库瓶颈
框架能降低访问数据库的压力,采用缓存是衡量一个框架是否优秀的重要标准,从缓存方面看Hibernate
A、对象缓存,细颗粒度,是针对表的级别,透明化访问,因为有不改变代码的好处,所以是ORM提高性能的法宝
B、Hibernate是目前ORM框架中缓存性能最好的框架
C、查询缓存
针对大家经常出现的Hibernate vs iBatis的讨论进行了一个总结:
对于OLTP应用,使用ORM框架 而OLEB应用(不确定是什么应用)最好采用JDBC或者其他方法处理
Hibernate倾向于细颗粒度设计,面向对象,将大表拆分为多个小表,消除冗余字段,通过二级缓存提升性能。
iBatis倾向于粗颗粒度设计,面向关系,尽量把表合并,通过Column冗余,消除关联关系,但是iBatis没有有效的缓存手段。
转自:http://www.educity.cn/wenda/389123.html
相关推荐
Hibernate程序性能优化的考虑要点
hibernate配置要点详谈hibernate配置要点详谈hibernate配置要点详谈hibernate配置要点详谈
讲一些hibernate深层次的工作原理。希望大家喜欢
struts2 spring hibernate 整合: 三者整合通过查询oracle数据库中的用户登录界面,最简单的配置。 struts.xml web.xml application.xml怎样配置,怎样依赖注入才能实现整合,显示出页面?请看这篇文档
Hibernate学习要点:一对一主键关联双向
hibernate和spring技术难点及其要点总结
java之hibernate和spring技术难点及其要点总结 个人总结 希望跟大家多多交流
Spring Hibernate整合要点之JPA 1 依赖包 2 注解实体 3 DAO实现 4 JPA配置 5 spring配置 6 修改web.xml
hibernate 映射文件 配置分析及要点,你还在为配置hibernate 映射文件而发愁吗?这里总结了它的常用元素及属性。session,SessionFactory的应用
Hibernate复习题1含答案要点.doc
使用mysql数据库的struts2 spring hibernate整合简单示例,也可参考我的:“struts2 spring hibernate整合要点、注意点”这篇文档来配置
Hibernate学习要点:一对一主键关联双向
hibernate笔记 hibernate基本要点 hibernate达内
Hibernate many2one 要点
struts、spring和hibernate的整合要点,给ssh新手提供ssh开发入门指南。
本书的名字就叫《Hibernate编程要点剖析》是一本很不错的学习hibernate的参考书;希望对大家有帮助
该文档详解hibernate每一章节知识要点,重在基础,是初级版教学!
1)Demo 学习要点简介: 1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回...
是很好的教材,案例写的很详细,基本知识要点都在上面,hibernate基本都够用了
struts2+hibernate框架的学习是一个很难的过程,但期末考试的学习也是一个很难的过程。这里简单的总结了一些复习要点,希望可以帮助你