文档章节

HIbernate数据动态更新

刘梓航
 刘梓航
发布于 2014/11/04 15:00
字数 450
阅读 1077
收藏 0

当spring整合hibernate之后事务就会被spring进行托管,那么当你在一个get一个对象之后在进行set对象时候你发现,事务提交后会执行一段update语句,数据库中的值也会改变,这就是动态更新。就是说,你的查询和赋值同时在一个相同的session中进行的,hibernate根据id判断是同一个对象,所以会自动更新相应的属性值。 


其实自动更新只是为了提高效率。 如果你不想让它自动更新,你们可采取以下方法: 在映射文件相应属性中设置update="false"可以不用更新该字段或者是在映射文件中的class标签里面加上:dynamic-insert="false" 

就像下边这样: 

<class name="com.orm.UserInfo"     table="user_info"     

         dynamic-update="false"     

         dynamic-insert="true"    

         optimistic-lock="version">


SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
session = HibernateUtil.openSession();
session.beginTransaction();
User u = new User();
u.setBorn(new Date());
u.setUsername("zhangsan");
u.setPassword("zhangsan");
session.save(u);
u.setPassword("222");           
//该条语句没有意义            
session.save(u);
u.setPassword("zhangsan111");           
//没有意义            
session.update(u);
u.setBorn(sdf.parse("1988-12-22"));            
//没有意义            
session.update(u);
session.getTransaction().commit();

这个时候会发出多少sql语句呢?还是同样的道理,在调用save方法后,u此时已经是持久化对象了,记住一点:如果一个对象以及是持久化状态了,那么此时对该对象进行各种修改,或者调用多次update、save方法时,hibernate都不会发送sql语句,只有当事物提交的时候,此时hibernate才会拿当前这个对象与之前保存在session中的持久化对象进行比较,如果不相同就发送一条update的sql语句,否则就不会发送update语句

Hibernate: insert into t_user (born, password, username) values (?, ?, ?)
Hibernate: update t_user set born=?, password=?, username=? where id=?

这样


© 著作权归作者所有

刘梓航
粉丝 12
博文 57
码字总数 11448
作品 0
天津
程序员
私信 提问
Hibernate性能优化1( 转)

有很多人认为Hibernate天生效率比较低,确实,在普遍情况下,需要将执行转换为SQL语句的 Hibernate的效率低于直接JDBC存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当...

九爷
2011/05/14
0
0
【原创】再谈基于注解运行时动态ORM映射

上一篇贴出《基于注解运行时动态ORM映射》的方案,到底哪些地方需要用?又该怎么用呢?!我想你会有这样的疑问,其实不瞒你说,我也有!呵呵~ 再谈一把,就成为“必须的”~ 因此,本文主要介绍...

andy_zheng
2012/11/13
0
8
ActiveJPA —— 针对JPA的活动记录模式

ActiveRecord是Ruby on Rails的ORM层,大体上类似于Java中的Hibernate。ActiveRecord基于约定优于配置的原则,所以它使用起来比 Hibernate更容易。在简化基本的数据操作方面,如创建、读取、...

红薯
2014/04/10
283
0
jfreechart柱状图如何实现数据动态更新.

jfreechart柱状图如何实现数据动态更新. 重JFreeChart的demo中有一个图是实现动态更新的.就是不知道如何实现.

chester168
2012/07/23
1K
1
flask+sqlite3+echarts3+ajax 异步更新数据

结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates |....|-- index.html | |-- app.py | |-- create_db.py 一、先准备数据......

罗兵
2016/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C 语言 二级指针的使用

#include <stdio.h>#include <stdlib.h>typedef struct node Node;struct node {int data;struct node* next;struct node* prev;};Node head;Node* insert(Node......

小张525
52分钟前
2
0
【大数据技术】——Hadoop(1)

什么是大数据 基本概念 《数据处理》 在互联网技术发展到现今阶段,大量日常、工作等事务产生的数据都已经信息化,人类产生的数据量相比以前有了爆炸式的增长,以前的传统的数据处理技术已经...

须臾之余
今天
8
0
比特币从地址逆向计算私钥

区块链 区块链简介 说到比特币,就不得不提区块链。那什么是区块链呢? 区块链本质是一个数据集,只不过数据的组织采用了比较特殊的方式,就是把数据拆分为一块一块的小数据集。 为什么要进行...

trayvon
今天
2
0
TypeScript……真香

写前端或者用 node 写命令行小工具一直采用的 es6 的语法,对于 TypeScript 则是秉持敬而远之的态度,毕竟团队中多推广一门语言所需要花费的精力都是让人望而却步的。所以对于 JavaScript 的...

郁也风
今天
3
0
shell基本案例

1、自定义rm linux系统的rm命令太危险,一不小心就会删除掉系统文件。 写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除。下面分两种情况,做...

寰宇01
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部