1.使用二级缓存,多把大批量的、短期多次的查询数据存到二级缓存中,避免和数据库的多次交互,增加负担。二级缓存加在那些增删改少的,查询多的类中。二级缓存的是对象,如果查出来的不是对象,不会放到缓存中去。如果用createquery.iterator,得到一个iterator对象,那么和load的道理差不多,用一条语句,把所有的对象的id取出,形成代理对象。使用的时候会一条一条的去数据库取, 这就是N+1问题。但是之所以存在iterator,是因为如果list查出来之后,放到一级缓存(session关闭就没了),更多的是放到二级缓存中的时候(session关闭还有),在用iterator,就会只查对象的id,然后根据id在缓存中提取对象,达到优化的目的。list之后在list还是取对象而不是取id。二级缓存比一级缓存持续时间长,所以iterator的意义更大一些,多次request请求甚至不是同一个地址的也可以使用。在hibernate中,iterator 和load非常相似,不过区别是,load方法的参数中是有id的,那么第一次创建代理对象的时候就直接创建不需要和数据库交互,而iterator方法中没有这个id,要从数据库根据查询语句取出来所有的id(创建代理对象?),等以后要用的时候再根据id,去数据库取,然而此时如果前面用list已经取过这些id对应的对象,放在一级或者二级缓存中了,那么就直接去缓存中取就可以了。

2.特大项目对象数据较少的,可以不用单独建表,可以考虑在需要的关联表上添加冗余数据,但是修改较麻烦。比如学生,班级,专业,可以班级和专业不单独建表,在学生的属性中增加班级名称和编号,专业名称和编号,作为冗余字段,如果想获得专业和班级对象,可以做一个dto,包含学生,班级,专业对象,将数据传输进。通过sql语句而不是hql语句查询,可以不用一级缓存,对内存占用量比较小,特定情况可以考虑。比如查看所有用户的操作,就没必要放入二级缓存中,因为这个是只有管理员偶尔才进行的操作,一级缓存中足够;当很多不同的地址或用户访问,都需要获取的数据,放到二级缓存中是最好的。hibernate在用hql语句的时候会自动转化成sql语句,然后得到的结果再自动封装成对象。如果不想用缓存,直接用sql语句,需要对得到的结果进行封装。如果对于@entity的对象,可以直接使用addentity()方法,对于没有被@entity管理的对象,比如dto对象,可以用setresulttransformer( )方法进行转换,得到dto对象。简单说就是你想封装成entity管理的对象,就直接addentity。如果想封装成自己新建的对象,就前面select出来的列名as一个和dto中属性相同的名称,然后用setresulttransformer( )方法进行封装。

3.由于二级缓存存的是对象,可以在对象类的配置中设置readonly,这样可以保证缓存中的数据在一定时期不会变化,但是有时候涉及脏数据问题。

4.你写了@manytoone,就意思是要把注解的属性的类和自己的类进行关联,自己的被注解的属性是1,自己的类是多,自己的属性在数据库里是外键,关联的是对方(1)的主键。而同时在一的类里面,多的set<> 一组属性写了@onetomany,

hibernate缓存和提高效率的更多相关文章

  1. java之hibernate之hibernate缓存

    这篇主要讲 hibernate缓存 1.缓存的作用是为了提高效率 2.Hibernate的开发效率比较高,但是执行效率相对较低. 3.Hibernate提供了缓存来提高效率.hibernate缓存分为 ...

  2. Hibernate缓存原理与策略

    Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...

  3. 菜鸟学习Hibernate——缓存

    Hibernate的缓存分为三种:一级缓存.二级缓存.查询缓存.下面我就为大家介绍一下. 一.概念. 一级缓存:第一级存放于session中称为一级缓存.Session 级别的缓存,它同session ...

  4. hibernate缓存技术

    1.缓存 2.Hibernate 缓存作用:为了提高查询效率. 3.第一次操作某个对象的时候,把操作的对象数据存储到缓存中,然后下一次在对同一个对象操作的时候,就不会在连接数据库. 4.Hiberna ...

  5. Hibernate学习笔记二:Hibernate缓存策略详解

    一:为什么使用Hibernate缓存: Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序访问物理数据库的频次,从而提高应用程序的性能. 缓存内的数据是对物理数据源的复制,应用 ...

  6. Hibernate缓存应用的积累与总结

    Hibernate缓存一直比较难掌握,下面就分析和总结原因,相信你就会慢慢清楚了原来Hibernate缓存也是可以轻松掌握的,但前提要求大家必须跟着动手去验证一下,再用心体会,光看是没有用的 目录: ...

  7. Hibernate缓存研究

    1. 什么是缓存? 数据库的缓存指的是应用程序和物理数据源之间的数据.即把物理数据源的数据复制到缓存.有了缓存,可以降低应用程序对物理数据源的访问频率,从而提高效率.缓存的介质一般是内存,也可以是硬盘 ...

  8. 实体类的状态与Hibernate缓存

    一.Hibernate中实体类的三种状态 1.瞬时态 该状态下实体类对象的id属性没有值,该对象和session也没有关系. 实例: UserEntity user = new UserEntity( ...

  9. Hibernate缓存策略

    Hibernate的一级缓存又称为Session缓存,其适用范围是在当前的会话之中,其生命周期和Session相同,随着Session的销毁,一级缓存也会随之销毁.一级缓存是不能取消的,Hiberna ...

随机推荐

  1. commonJS — 数字操作(for Number)

    for Number github: https://github.com/laixiangran/commonJS/blob/master/src/forNumber.js 代码 /** * Cre ...

  2. 2010 word 如何新建目录

    首先插入一个bullet 填充内容,编好编号,选择文字,右键,然后选择相应的level,然后点击一级菜单reference, 然后点击table of contents, 选择某一个样式,然后插入成功 ...

  3. K-均值聚类及其在生物信息中的应用

    如果一点基础没有最好先拿起一本教材开始学,<机器学习实战>还不错,P93,书上有python源码和练习数据,非常适合新手. k均值聚类 名词:簇:相似度算法 伪代码 创建K个点作为起始质心 ...

  4. iOS高性能图片架构与设计

    版权声明:本文由柯灵杰原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/157 来源:腾云阁 https://www.qclo ...

  5. 中医与DBA

    很多药方,只要吃不死,总有一款适合你.哈哈.我要做西医,先检查身体,再了解每种药的作用,做到对症下药.

  6. DirectX中的纹理及其创建

    正如大多初学者会遇到一个问题, 导入的图片为何不是原来的尺寸?例如800*600的实际上通过D3DXCreateTextureFromFile后变成的是1024*1024,即宽和高默认都会自动扩展为2 ...

  7. ServletInputStream的重复读取(多次读取)(转)

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  8. sql server 导出数据到 Azure Hbase / Hive 详细步骤

    The Hadoop on Azure Sqoop Import Sample Tutorial Table of Contents   Overview   Goals Key technologi ...

  9. Unique Paths [LeetCode]

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  10. 使用MediaRecorder录制音频

    手机一般都提供了麦克风硬件,而Android系统就可以利用该硬件来录制音频了. 为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制 ...