Hibernate动态更新
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"。
对于实体类注解来说,在类上面使用注解:
动态更新适用环境:
对于字段过多表来说,应该使用动态更新;
对于更新频繁的表来说,应该使用动态更新;
对于使用了Hibernate拦截器,而又不想使用事务的时候,应该使用动态更新。
Hibernate动态更新的更多相关文章
- Hibernate 注解 动态插入( DynamicInsert) 动态更新(DynamicUpdate)
@DynamicUpdate(value = true)@DynamicInsert(value = true) 这两个注解默认是false,经试验,如果使用了这两个注解,在一定程度上是可以提高插入和 ...
- JSPatch – 动态更新iOS APP
原文:http://blog.cnbang.net/works/2767/ JSPatch是最近业余做的项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的 ...
- JAVA代码热部署,在线不停服动态更新
本地debug的时候,可以实时编译并更新代码,线上也可以不停服来动态更新类,即所说的java热部署. JDK代理的两种方式: 1.premain方式是Java SE5开始就提供的代理方式,但其必须 ...
- elasticsearch同义词及动态更新
第一种:参考地址:http://dev.paperlesspost.com/setting-up-elasticsearch-synonyms/271.Add a synonyms file.2.Cr ...
- 在Android中实现service动态更新UI界面
之前曾介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的.那么如何实现service动态更新UI界面呢?案例:通过service ...
- Android中动态更新ListView(转)
在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中.实现步骤:调用ListView的setOnSc ...
- Js多国时间动态更新
Js多国时间动态更新 点击下载
- Fragment碎片的创建和动态更新
Fragment,在平板应用中较为参见,把视图分为两个甚至多个模块. 一,一个简单的fragment 1.创建两个局部文件,用于等待被调用 (1)left_fragment (2)right_frag ...
- django 动态更新属性值
django 动态更新属性值 class TestTime(models.Model): """ 功能说明:指定测试的每一关总用时 """ ...
随机推荐
- git config配置文件
设置 git status的颜色. git config --global color.status auto 一.Git已经在你的系统中了,你会做一些事情来客户化你的Git环境.你只需要做这些设置一 ...
- Linux 字符集转化
命令行"iconv --list" 查看Linux操作系统支持的字符集 iconv_open 设置字符集转化 --iconv_t iconv_open(const char *to ...
- LUA GC 简单测试
function table.count(t) if type(t) ~= "table" then assert(false) return end for k, _ in pa ...
- pre标签避免一行过长打破格局
pre{ white-space:pre-wrap; word-wrap:break-word; word-break:break-all }
- Integrating JAD decompiler into JDeveloper(转)
原文地址:Integrating JAD decompiler into JDeveloper In JDeveloper, when debugging or otherwise navigatin ...
- ASP.NET中进行消息处理(MSMQ) 三
在本文的前两篇文章里对MSMQ的相关知识点进行了介绍,很多阅读过这前两篇文章的朋友都曾问到过这样一些问题: 1.如何把MSMQ应用到实际的项目中去呢? 2.可不可以介绍一个实际的应用实例? 3. ...
- Volly框架的使用基础版及使用中的一些坑 Ace 网络篇(三)
直接把注释粘过来: * Volley使用讲解: * 要实现网络数据请求主要要记住下面三步骤: * 1.创建RequestQueue对象 * 2.创建XXRequest对象(XX代表String,JSO ...
- UIButton利用分类扩展方法(封装)
UIButton+BackgroundColor.h #import <UIKit/UIKit.h> @interface UIButton (BackgroundColor) - (vo ...
- 【MPI学习5】MPI并行程序设计模式:组通信MPI程序设计
相关章节:第13章组通信MPI程序设计. MPI组通信与点到点通信的一个重要区别就是:组通信需要特定组内所有成员参与,而点对点通信只涉及到发送方和接收方. 由于需要组内所有成员参与,因此也是一种比较复 ...
- Unity3D 的摄像机
什么是摄像机 Unity3D中,摄像机是一个非常非常重要的组件. 他的作用就是:将你设计的场景投影到设备的屏幕上. 摄像机的属性 1 clear flags 确定屏幕的哪一部分将被清除. 每个摄像机在 ...