hibernate应该何时调用transaction的commit方法将数据与数据库同步

hibernate中,调用session的save、delete、update方法后只是缓存到session里,应该什么时候使用transection的commit方法与数据库数据同步?如果每次调用sava、delete等方法提交一次,好像违背了hibernate的初衷,性能不好。但在网站开发时,添加一个用户信息、更新、或删除时,这些操作是要及时与数据库同步的。我的问题就是应在什么时候把数据提交到数据库。

0

4个回答

这就得根据你的业务需求来确定事务的边界,例如添加用户信息,添加完成以后就得commit,而不是继续操作等着更新或者其他操作以后才commit,
这和性能无关,得和你的业务逻辑来确定事务的边界

0

如果你没有集成spring,则需要自己确定事务,事务完成之后手动提交。如果你集成了spring,配置事务后,每次事务会自己提交,即不用手动commit,而且当抛出RuntimeException的时候事务会自己回滚。

0

session.flush();
trans.commit();
就可以发出sql,将数据插入到数据库

0

数据库操作是放在事务内进行.
先开启事务-->对数据进行删除,增加等操作。执行到这步数据是放在缓存里,数据未提交到数据库-->事务提交。这步执行后数据同步到数据库。如果出现异常应进行事务回滚。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
转:Could not commit Hibernate 问题,spring 事物 提交前session关闭问题
org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started 最近在写操作
Could not commit Hibernate 异常问题,spring 事物 提交前session关闭问题
org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started 最近在写操作
Hibernate中Transaction事务的批量提交
Hibernate中Transaction事务的批量提交
Hibernate中session的flush方法和commit()方法区别
参考地址:http://blog.csdn.net/cmtobby/article/details/1750632
Hibernate——flush()方法强制同步数据库
@Test public void testFlush() { Session session = sf.getCurrentSession(); session.beginTransaction(); Student s = (Student)session.load(Student.class, 2); s.setName("ss"); s.setName("sss
Hibernate中持久化上下文的flush操作之一COMMIT
在Hibernate中持久化上下文的flush操作模式中,JPA还支持COMMIT(JPA只支持AUTO和COMMIT两种)。对于COMMIT的flush操作模式,JPA针对HQL查询和native SQL查询有不同的执行: 对于HQL查询,无论是否涉及到了被缓冲的Entity对象,都只会在当前事务提交的时候执行flush操作对于native SQL查询,如果涉及到了被缓冲的Entity
Hibernate实战数据持久化之四Session的clear()、flush()、commit()、close()方法
flush()        flush方法的主要作用就是清理缓存,强制数据库与hibernate缓存同步,以保证数据的一致性。    通常,执行session.save,update,delete的时候,只是一个登记行为,只有在调用flush方法时,才会将hibernate缓存中的数据提交到数据库(将登记行为的sql提交到数据库,但是还是没有提交到数据库,没有保存数据)(Flush all pe...
Hibernate 事务提交sql语句的顺序
最近做的项目有一个很麻烦的业务,一个操作里包含了insert,update,delete,select动作。 一开始起在一个hibernate事务里,发现在入库的时候有的时候数据对不上,后来查了下资料才知道hibernate事务提交sql语句的顺序并不是按照程序里写的顺序提交的。 总的说应该是按insert、update、delete的顺序。 具体的顺序查了下应该是: 涉及的SQL语句会按
hibernate使用flush强制同步数据库
问题描述 同步车企的车型数据,由于得到的数据存在重复的品牌不同的车型,而我们的车辆品牌也需要 单独保存,所以每次循环结束都会插入很多重复的品牌数据。 问题分析 hibernate源码分析 – 持久化原理 hibernate的持久化机制是采用session容器的方式来缓存数据,当进行save或者update 对象时,Hibernate并未将这个对象实际的写入数据库中,而仅仅是...
Hibernate在更新时,是可以不用session的update方法的(
public void synDevNameWithItil() { Session session = null; Transaction tr = null; try { session = HibernateUtil.getSession(); tr = session.beginTransaction(); tr.begin(); Query query = sessio
MySQL innodb引擎,事务提交 commit 异常,但数据提交成功
昨天线上服务出现的奇怪的异常,数据库中数据已经提交(都是innodb引擎), 但是java代码抛出异常,并从日志分析是commit异常,最后在catch中的rollback都为时已晚。 这次的异常可与之前的与众不同,之前的如果commit异常了,数据肯定是回滚了(mysql服务器没有收到commit,并且连接已经中断),commit异常了,但是服务器数据没有回滚。
MySQL逻辑并行复制的实现
一、并行复制主库涉及到三个部分 1、binlog类保持两个值 /* Committed transactions timestamp */ Logical_clock max_committed_transaction; /* "Prepared" transactions timestamp */ Logical_clock transaction_counter;
Hibernate数据持久化及update更新问题
关于Hibernate的Session update问题 Hibernate在进行数据处理时实现了数据的持久化。持久化对象分为三种状态;分为:瞬时态、持久态、托管态;处理持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为为VO(Value Object)   瞬时态 当由new 命令开辟内存空间存储的JAVA 对象称之为瞬时对象。因为这种对象还没有进入
Hibernate中的Session的refresh()方法执行效果与数据库的隔离级别有关
//4. 执行保存操作 News news = (News) session.get(News.class, 4); System.out.println(news);//第一个输出News [id=4, title=4Java, author=地方, date=2017-02-18] //打断点,执行完第一个输出后,在数据库端把记录的author字段值改为sun,后继续执行代码 sessi
数据库处理中的begin transaction 命令
begin transaction 命令 启动一个事务处理。仅对数据库中的表支持事务处理。有关如何在数据库中创建和增加表的详细信息,请参阅 CREATE DATABASE 和 ADD TABLE 。 具体的作用和用法说明: 为了保存所做的修改并终止事务处理,应发出 END TRANSACTION 命令。如果事务处理失败(如服务器有故障或工作站有故障,以及没有提交事务处理就退出 Visual F
HTML5 Web SQL 数据库 创建及查询【创建数据库:openDatabase(); 创建表及插入数据的函数:database.transaction(function (tx){})】
HTML5 Web SQL 数据库 Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs。 如果你是一个 Web 后端程序员,应该很容易理解 SQL 的操作。 你也可以参考我们的 SQL 教程,了解更多数据库操作知识。 Web SQL 数据库可以在最新版的 Safari, Chro
Hibernate的方法获取对象后,对象调用set后会自动更新数据库内容的解决办法
例如:Object obj = dao.get(Object_2.classs,id);obj.setName("张三");这种情况下Hibernate下次提交事务的时候会把这个数据库中对应数据更新成set后的。产生原因涉及到Hibernate设计原理,(以下这段话复制地址:http://blog.csdn.net/yang_lover/article/details/45057181)1.瞬态:...
hibernate基于annotation(注解)的方式创建数据库表以及保存数据到数据库表中(重要)
在这里创建项目后要把相关jar包与数据库相关的jar包引入,并且配置好hibernate.cfg.xml文件,这个项目采用的数据库名称是hibernate_anno.再创建一个实体类User,我们用的是注解的方式,所以不用像上篇文章中创建一个实体类的配置文件,可以直接在实体类中进行注释,这样就简单很多。<?xml version='1.0' encoding='utf-8'?> &lt...
Hibernate 中save方法运行成功之后却没有保存进数据库的原因
刚刚使用myeclipse的Hibernate 反向工程生成的dao文件的save方法不能入库1.首先很多时候我们把id设置为自动增长的,而反向工程生成的类中并没有设置申明该字段为自增,可以对这个字段前面做如下设置: @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "id", unique = true, nullable = false)2.JDBC默认的是自动提交而Hibernian默认的是手动提交,必须beginTran
SQL Server数据库事务处理详解 TRANSACTION
务定义:事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据更改均被清除。事务三种运行模式:自动提交事务每条单独的语句都是一个事务。显式事务每个事务均以 BEGIN TRANSACTION 语句显式开始,以 COMMIT 或 ROLLBACK 语句显式结束。隐性事务在前一个事务完成时新事务隐
如何保证transaction commit的完整性
欢迎和我探讨数据库技术,可以给我发信:tieyingz@cs.cmu.edu 当commit涉及到多行的时候,并且提供的是行锁,那么就涉及到如何保证多行commit的完整性,不至于1行提交了,另外一行没有提交,那么concurrent txn会读到不同的结果。 如何解决上述问题?需要一个全局锁,至于这个锁如何实现,不同数据库不同方法。感兴趣的同学可以参考一下oracle的实
Hibernate的编程细节——事务回滚
一 事务回滚代码 private static void updateEmp() { //修改用户 //获取一个会话 /* Session session=MySessionFactory.getSessionFactory().openSession();
service调用的存储过程里显式commit,而导致事务不能rollback
http://www.iteye.com/topic/75921?page=2 程序用的spring声明式事务管理 开始事务使用正常,后来发现一个service method事务出错,其操作如下 1.create obj1 2.调用obj2 的method 来执行存储过程sp 3.create obj3 发现在第3步出错时,第1步的操作没有rollback 检查后发现
Hibernate 的初始化
public static void main(String[] args) { //方法1.使用hibernate.cfg.xml作为hibernate的配置文件的时候 /** * new Configuration().configure()会负责加载 上面的配置文件 */ Configuration conf=new Configuration().conf
hibernate做数据同步时的问题
当我们有做数据同步需求时,如果表中除了主键不能重复,还有其他字段比如名称不能重复,那么在做同步时可能会出现以下情况: A平台上数据已经删除,此时B平台的数据库还未同步,这时A平台新增了一个名称与原来一样的资源。这时B平台开始做数据同步,不巧的是,删除操作在添加操作之后,那么会出现无法保存名字相同的数据。那么该怎么办? 解决方法就是先做删除,后做保存。但由于是批量操作,即使用一个commit,还
Hibernate中session.flush()会不会去数据库执行SQL语句
首先可以确定的是,如果不提交事务的话,虽然会生成SQL语句,但数据库中的数据并不会改变 测试代码如下: 首先我的数据库中有这些条数据,实体对象为UserModel 代码如下 Session session = HibernateUtil.getSession(); Transaction transaction = session.beginTran
Hibernate 自动提交
碰到一个同事没有用@Transactional声明事务,数据库还是提交了。感觉奇怪,测试验证了一下,记录一下 代码:    @Transactional    public void addSe() {        Se se = new Se();        se.setName("test");        commonDao.getHibernateTemplate().save(...
使用基于注解的AOP的事务管理 @Transaction (转)
Spring Transaction Spring 2011-04-15 19:25:24 阅读12 评论0   字号:大中小 订阅 Transaction ^^^^^^^^^^^^^^^^^^^^^^^^^^ -->           tr
SSH整合, Hibernate正确执行了save方法,但是数据没有保存到数据库
SSH整合时,Hibernate不嫩自动提交的问题总结
Hibernate开发实践笔记--对象在set属性时更新了数据库问题
之前一直没发现这个问题,后来是因为我的导航栏数据库中数据发生变动后,产生菜单的时候又update了一遍数据库中的数据,使得部分数据值为空了,当时觉得很奇怪,后来仔细看了下log4j打印的日志发现其中有更新的动作,在代码中将数据库中获取到的对象set一个对象属性时,数据库就update了,但是这个问题是怎么产生的呢? 问题重述 Set users = new HashSet(); Use
Hibernate(1)Hibernate简介和简单示例,了解Hibernate事务回滚用法
1 Hibernate简介 Hibernate是一个orm(object relation mapping 对象关系映射)框架,处于项目的持久层,也叫持久层框架(持久层框架还有ojb等)。 Hibernate本质就是对JDBC进行了轻量级的封装。 2 使用Hibernate的好处①引入Hibernate可以使工作人员角色细化,让程序员更关心业务流程。让数据库人员更关注数据库相关的各种操作。 ②分层
解决hibernate的save方法没有将数据写进数据库
问题描述; 向数据库中写数据时,不报错也没有异常抛出,提示写入成功,但就是不能写入数据库。 hibernate自动生成的代码如下:public void save(TbHoteladmin transientInstance) { log.debug("saving TbHoteladmin instance"); try { getSes
sqlite3使用事务处理
sqlite3使用事务处理[zz] 标签: sqlite数据库insert测试磁盘sql 2010-09-24 12:10 10890人阅读 评论(1) 收藏 举报  分类: Database(3)  <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1
hibernate事务没有自动提交
最近自己的项目。发现做修改操作时,项目没有报错,但是数据库数据没有修改,结果发现是自己马虎问题导致的。整合一下网络上查来的各种解决方法:session获取方式为:sessionFactory.getCurrentSession()1、可以创建,不能更新、删除。需要手动flush<tx:advice id="txAdvice" transaction-manager="transactionManag
mybatis并发数据库报错,数据库操作对象已关闭
最近在使用mybatis做数据库管理的时候出现了一个问题,因为只是一个控制台项目,所以没有整合spring,只是用了mybatis默认的一些数据库配置信息。 然后再与前端做交互的时候前端并发访问总是会出现这几个错误: Cannot commit, transaction is already closed ### Cause: org.apache.ibatis.executor.Execu
使用Hibernate 中的merge()方法
不知道大家注意到没有在使用Hibernate 中的merge()方法时,有的时候直接使用session.merger(user);就可以执行了。但是有的时候却不执行,而是要在写成Transaction tr = session.beginTransaction();session.merge(user);tr.commit(); 这样才可以执行。 目前我还不知道这是为什么,不过我只使用sessio
Hibernate4 事物解决问题
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' mar
【Laravel】数据库事务
最近公司项目集成了一个支付的模块。由于网络世界是不确定的。说不定哪个操作就出了问题。为了保证数据的正确性我们不得不考虑使用数据库事务这一特性。本做一个简单的Laravel数据库事务的介绍。
Nhibernate中的连接超时时事务回滚引发异常的处理方法
最近在做一个短信项目,采用的nhibernate+sqlserver。因为数据量大,所以采用多线程的方式。有时会触发超时。当超时时事务再回滚也会触发异常nhibernate Transaction not connected, or was disconnected,所以在回滚时再加一个trycatch语句,当然这不是最好的解决方法,需日后完善。代码如下 :   public IList Ge
Hibernate在更新时,是可以不用session的update方法的
public void synDevNameWithItil() { Session session = null; Transaction tr = null; try { session = HibernateUtil.getSession(); tr = session.beginTransaction(); tr.begin(); Query query = sess
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 数据库课程应该 数据库课程应该