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. ABP入门系列——使用ABP集成的邮件系统发送邮件

    ABP中对邮件的封装主要集成在Abp.Net.Mail和Abp.Net.Mail.Smtp命名空间下,相应源码在此. #一.Abp集成的邮件模块是如何实现的 分析可以看出主要由以下几个核心类组成: E ...

  2. Go cron定时任务的用法

    cron是什么 cron的意思就是:计划任务,说白了就是定时任务.我和系统约个时间,你在几点几分几秒或者每隔几分钟跑一个任务(job),就那么简单. cron表达式 cron表达式是一个好东西,这个东 ...

  3. zabbix一件漂亮的外衣配置

    http://www.cnblogs.com/yyhh/archive/2015/09/08/4792830.html

  4. 实战 SQL Server 2008 数据库误删除数据的恢复

    SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可.但是,这个恢复需要有两个前提条件: 1. 至少有一个误删除之前的数据库完全备份. 2. 数据库的恢复模式(Recovery m ...

  5. 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。

    新建一个MVC4的项目,引用DAL后,将DAL的连接字符串考入: <connectionStrings>     <add name="brnmallEntities&qu ...

  6. Linux常用指令---$PATH (环境变量)

    实例一:设置临时环境变量 在linux服务器上设置临时环境变量,当退出shell环境时,自动销毁 export JAVA_HOME=/usr/java/jdk1.6.0_32 export class ...

  7. 端口扫描之王——nmap入门精讲(二)

    接着讲上节的内容,上节中提到了一个时间优化的问题是使用参数-n,通过不解析地址来进行优化时间的,但是优化时间的方法还有很多,比如说我们可以通过时间优化(0-5),指定单位时间内的探针数,设置组的大小 ...

  8. servlet请求转发、包含以及重定向

    请求转发: 方式一: ServletContext对象.getRequestDispatcher(目标资源的URI).forward(request,response); 目标资源的URI " ...

  9. GridView的常规用法

    GridView控件在Asp.net中相当常用,以下是控件的解释,有些是常用的,有些是偶尔用到的,查找.使用.记录,仅此而已.(最后附带DropDownList控件) ASP.NET中GridView ...

  10. 第三十三课:jQuery Deferred详解1

    之前我们讲了Mochikit Deferred,JSDeferred,现在讲jQuery Deferred.首先,我们先来讲下他们的区别: 在保存回调函数时,Mochikit Deferred(doj ...