Hibernate一级缓存:


Hibernate有一级和二级缓存。一级缓存就是Session。

在Hibernate启动的时候,SessionFactory解析映射文件的时候,会根据映射文件中的字段生成查询、删除和更新语句。例如Student类对应的映射为id->id,name->s_name,age->s_age。后面的字段是数据库定义字段。那么在Hibernate启动的时候,会为Student生成查询语句 select * from student,删除语句delete from student where id= ?,更新语句:update student set s_name =? ,s_age = ? where id = ?。

Hibernate这样做,自然是为了运行时的性能考虑。

动态更新的需求:


但是当表中的字段过多,而我们需要更新的字段却很少的情况下,Hibernate这种工作方式,无疑会带来数据库的压力。甚至有的情况是,我们虽然执行了session.update()语句,但是数据本身和数据库是一样的,并不需要更新。Hibernate不会自动处理这种情况,我们可以通过配置来完成动态更新。

动态更新的实现:


实现动态更新数据,必须把对象中的数据和数据库数据进行对照,也就是说我们必须先进行查询。查询后,对比数据,然后只针对修改的数据进行更新。

查询对于数据库性能的影响微乎其微,所以在相应的实体类映射文件中,推荐使用动态更新。

对于xml映射文件来说,在<class>元素上添加属性select-before-update="true"  dynamic-update="true"。

对于实体类注解来说,在类上面使用注解:

          @DynamicUpdate(true)
          @SelectBeforeUpdate(true)
 
 

动态更新适用环境:


对于字段过多表来说,应该使用动态更新;

对于更新频繁的表来说,应该使用动态更新;

对于使用了Hibernate拦截器,而又不想使用事务的时候,应该使用动态更新。

Hibernate动态更新的更多相关文章

  1. Hibernate 注解 动态插入( DynamicInsert) 动态更新(DynamicUpdate)

    @DynamicUpdate(value = true)@DynamicInsert(value = true) 这两个注解默认是false,经试验,如果使用了这两个注解,在一定程度上是可以提高插入和 ...

  2. JSPatch – 动态更新iOS APP

    原文:http://blog.cnbang.net/works/2767/ JSPatch是最近业余做的项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的 ...

  3. JAVA代码热部署,在线不停服动态更新

    本地debug的时候,可以实时编译并更新代码,线上也可以不停服来动态更新类,即所说的java热部署.   JDK代理的两种方式: 1.premain方式是Java SE5开始就提供的代理方式,但其必须 ...

  4. elasticsearch同义词及动态更新

    第一种:参考地址:http://dev.paperlesspost.com/setting-up-elasticsearch-synonyms/271.Add a synonyms file.2.Cr ...

  5. 在Android中实现service动态更新UI界面

    之前曾介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的.那么如何实现service动态更新UI界面呢?案例:通过service ...

  6. Android中动态更新ListView(转)

    在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中.实现步骤:调用ListView的setOnSc ...

  7. Js多国时间动态更新

    Js多国时间动态更新 点击下载

  8. Fragment碎片的创建和动态更新

    Fragment,在平板应用中较为参见,把视图分为两个甚至多个模块. 一,一个简单的fragment 1.创建两个局部文件,用于等待被调用 (1)left_fragment (2)right_frag ...

  9. django 动态更新属性值

    django 动态更新属性值 class TestTime(models.Model): """ 功能说明:指定测试的每一关总用时 """ ...

随机推荐

  1. GIT在Linux上的安装和使用简介

    GIT最初是由Linus Benedict Torvalds为了更有效地管理Linux内核开发而创立的分布式版本控制软件,与常用的版本控制工具如CVS.Subversion不同,它不必服务器端软件支持 ...

  2. MySQL基础 - 如何系统地学习数据库?

    对于数据库的认知,除了大学的时候上过数据库这门课,留下的印象大概就是几条SQL语句一些模棱两可的基本概念,直到工作后面临使用场景才发现数据库的重要性.故归纳总结一下自己的数据库学习之路. 学习资源: ...

  3. JS 之BOM

    BOM的核心对象是window,表示浏览器的一个实例. 使用框架时,window.top对象指顶层框架,也就是浏览器窗口.window.parent对象指包含当前窗口的框架,也就是父框架.window ...

  4. REST: C#调用REST API (zz)

    由于辞职的原因,最近正在忙于找工作.在这段期间收到了一家公司的上机测试题,一共两道题,其中一道题是关于REST API的应用.虽然在面试时,我已经说过,不懂REST,但那面试PM还是给了一道这题让我做 ...

  5. 使用jQuery加载html页面到指定的div

    一.jQuery加载一个html页面到指定的div里 把a.html里面的某一部份的内容加载到b.html的一个div里.比如:加载a.html里面的<div id=“row"> ...

  6. Koala Framework是什么?我为什么要写这个框架?

    当时的监管组,技术力量累积的很少,还在直连DB,使用着DataTable.DataSet作为数据的承载,监管是公司最近几年主推的项目,所以领导们决定进行重要调整. 初来乍到 由于之前没有任何的技术积累 ...

  7. java网络编程基础

    前言 通过网络进行数据传输时,一般使用TCP/UDP进行数据传输.但是两个的区别就是TCP可靠,UDP不可靠.两个的共同之处就是都需要建立socket套接字,将IP地址和端口port进行绑定.但是服务 ...

  8. Spring 事务配置管理,简单易懂,详细 [声明式]

    Spring 事务配置说明 Spring 如果没有特殊说明,一般指是跟数据存储有关的数据操作事务操作:对于数据持久操作的事务配置,一般有三个对象,数据源,事务管理器,以及事务代理机制: Spring ...

  9. grunt使用watch和livereload的Gruntfile.js的配置

    周末在家看angularJS, 用grunt的livereload的自动刷新, 搞了大半天, 现在把配置贴出来, 免得以后忘记了, 只要按照配置一步步弄是没有问题的; 开始的准备的环境安装是: (1) ...

  10. Java虚拟机的功能

    1:通过ClassLoader寻找和装载class文件 2:解释字节码成为指令并执行,提供class文件的运行环境.即将字节码转换为不同OS下可执行的机器码指令. 3:进行垃圾回收. 4:提供与硬件交 ...