今天同事遇到一个问题,一起研究,最后解决,让我对spring的事务管理又加深了印象. 先简单说一下项目:项目是Spring和Hibernate集成的JavaEE项目,MVC架构. 外包在service层一个以get开头的方法中写了一些业务逻辑,分别调用了dao层的save和get方法,但是发现get的数据正常显示,数据表中该save的并没有存入数据表,查hibernate生成的sql也只查到了get的语句,没有发现save的语句,也没有报任何错误.很奇怪的现象,不怕报错,就怕它不报错~ 遂检查了…
今天做项目,碰上这个问题: hibernate的save方法成功执行,但是未插入到数据库. Dao层代码: @Override public void save(T t) { this.getSession().save(t); } Service层的代码: @Override public void save(T t) { // TODO Auto-generated method stub dao.save(t); } 原因:未给操作添加事务. 解决方法: 给service层加上事务的注解就…
问题描述: 系统中多个功能不定期出现“Unable to get error message (6107) (0).”错误,即分布式事务超时,但报出错误的部分功能根本没有使用分布式事务. 原因分析: 推测是存在分布式事务未提交的情况,回到线程池后被复用造成的,例如: 系统中A功能存在分布式事务未提交的问题,处理A功能的线程执行完成后回到线程池,B功能复用了处理A功能的线程,A功能未提交的分布式事务将B功能的代码也包含进去了,依次类推可能还有C.D等功能,直到A功能开启的分布式事务超时报出6107…
未提交读注意事项 使用 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 指定会话的锁定级别. 一次只能设置一个隔离级别选项,而且设置的选项将一直对那个连接始终有效,直到显式更改该选项为止. 事务中执行的所有读取操作都会在指定的隔离级别的规则下运行,除非语句的 FROM 子句中的表提示为表指定了其他锁定行为或版本控制行为. 事务隔离级别定义了可为读取操作获取的锁类型. 在事务进行期间,可以随时将事务从一个隔离级别切换到另一个隔离级别,但有一种情况例…
maven分模块开发样例小项目案例 spring+springmvc+hibernate架构 以用户管理做測试,分dao,sevices,web层,分模块开发測试!因时间关系.仅仅測查询成功.其它的准备在ext上做个完整的案例来的,可惜近期时间非常紧. 高级部分也没做測试,比方建私服,其它经常使用插件測试之类的,等用时间了我做个完整ext前端和maven 完整的样例出来,在分享吧. 只是眼下这些撑握了.在项目中做开发是没有问题的,其它高级部分是架构师所做的. 之前我有的资源都加上了积分,有些博友…
记一次mysql事务未提交导致锁未释放的问题 ## 查看未提交的事务(3秒内未操作的事务) SELECT p.ID AS conn_id, P.USER AS login_user, P.HOST AS login_host, p.DB AS database_name, P.TIME AS trx_sleep_seconds, TIME_TO_SEC(TIMEDIFF(NOW(),T.trx_started)) AS trx_open_seconds, T.trx_started, T.trx…
horizon使用的是backbone框架,但是我们的后台api都是只接收post请求,请求的路径为/api/,根据backbone的官档解释: backbone的model.save方法会判断当前的model对象是否存在存在服务器中,如果存在服务器中,则调用"update" (HTTP PUT), 如果不存在,则调用"create" (HTTP POST), 判断的依据即为当前的model的属性'id'是否存在. 举例如下: var UpdateAgentV =…
1.使用spring控制事务 2.使用session.update(obj)执行更新 spring事务配置: <bean id="transactionBese" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true"> <property…
问题描述 在 MyEcplise 上运行 tomcat,利用 po 模板自动生成 po 文件,调用 po 的 save 方法,不报错,但是无法把数据插入数据库 applicationContext.xml 中文件配置 <bean id="SysConfigDAO" class="com.po.SysConfigDAO"></bean> po 中 dao 文件的引用 public class UserDAO extends BaseHibern…
问题及说明: 当一个SQL事务执行完了,但未COMMIT,后面的SQL想要执行就是被锁,超时结束:报错信息如下: mysql> ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 处理步骤: 该问题发生环境为MySQL 5.6,在MySQL 5.5版本后,information_schema 库中增加了三个关于锁的表,分别如下: innodb_trx:当前运行的所有事务 innodb_locks:当…
如题: service1: dao1.save(obj);   //失败,应该给spring捕获,但没有,程序继续执行下去了. redisService.fun1();  //被执行 service2: dao1.update(obj);   //失败,错误给spring捕获,抛出异常,程序终止. redisService.fun1(); 经过查找相关资料,确认是因为数据库表主键的问题        <id name="id" type="java.lang.Strin…
一.问题 我们调用数据,大都是可以直接获取表中的数据,或者用复杂点的sql语句组成的.但是,有时候,当这样达不到我们要的全部数据的时候,这时,我们就用到了存储过程[sp],如果sp需要参数是数组的话,要怎么办呢? 二.解决之法 public CbsResult payForBills(final String sapId, final String office,final ArrayList<String> custCdes) { Connection con = DBUtil.getCbs…
原文地址:https://blog.csdn.net/jiegegeaa1/article/details/81975286 一.工作环境 编辑器用的是MyEclipse,用Mysql数据库,maven管理jar包. 二.搭建环境 (1)完整工程图: (2)pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst…
前几天犯了个低级错误.在一个事务方法里老是查询不到某条记录,可是debug卡住时,用db工具查.又能查出值. 经过一番折腾,原来是我在同一个事务里 查询 了已删除可是未提交的数据.当然查询不到了! .! 情况是这种: Service层(spring事务管理配置在这一层,此方法配了PROPAGATION_REQUIRED)有个方法function m()写得非常长. 当中有2步是 1. delete from B where objectid ='TestB' 2. select * from A…
原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中的事务概念,ACID 原则,事务中常见的问题,问题造成的原因和事务隔离级别等这些方面的知识好好的整理了一下. 其实有关 SQL Server 中的事务,说实话因为内容太多, 话题太广,稍微力度控制不好就超过了我目前知识能力范围,就不是三言两语能够讲清楚的.所以希望大家能够指出其中总结的不足之处,对我…
原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中的事务概念,ACID 原则,事务中常见的问题,问题造成的原因和事务隔离级别等这些方面的知识好好的整理了一下. 其实有关 SQL Server 中的事务,说实话因为内容太多, 话题太广,稍微力度控制不好就超过了我目前知识能力范围,就不是三言两语能够讲清楚的.所以希望大家能够指出其中总结的不足之处,对我…
1.问题复现 spring 3.0 + hibernate 3.2 spring mvc使用注解方式:service使用@service注解 事务使用@Transactional 事务配置使用 <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> <tx:annotation-driven transaction-man…
持久态对象: 自动更新数据库,原理是一级缓存. 缓存:是一种优化的方式,将数据存入内存,从缓存/内存中获取,不用通过存储源 Hibernate框架中提供了优化手段:缓存,抓取策略 Hibernate中提供了两种缓存机制:一级缓存,二级缓存 一级缓存:session级缓存,一级缓存生命周期与session一致(是由session中一系列Java集合构成) 二级缓存:SessionFactory级别的缓存,需要配置的缓存,开发中一般用Redis替代了. 一级缓存: 即session缓存,sessio…
spring mvc使用注解方式:service使用@service注解 事务使用@Transactional 事务配置使用 <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> 在插入或更新数据时,无报错,但数据库中无结果,而查询正常.疑为事务未提交. 方式用来扫描该包以及其子包下的@Controller注解的类,纳入spr…
1.配置映射关系的xml方式 我们知道,Hibernate是一个典型的ORM框架,用以解决对象和关系的不匹配.其思想就是将关系数据库中表的记录映射成为对象,以对象形式展现,这样一来,就可以把对数据库的操作转化为对对象的操作. 而ORM一般是采用xml的格式保存对象与关系数据表的映射,我们也可以从下面示例中看到hibernate中的一个映射配置表的表现形式: <?xml version="1.0" encoding="utf-8"?> <!DOCTY…
Session的save()方法用来将一个临时对象转变为持久化对象,也就是将一个新的实体保存到数据库中.通过save()将持久化对象保存到数据库需要经过以下步骤: 1,系统根据指定的ID生成策略,为临时对象生成一个唯一的OID: 2,将临时对象加载到缓存中,使之变成持久化对象: 3,提交事务时,清理缓存,利用持久化对象包含的信息生成insert语句,将持久化对象保存到数据库. OK,下面来看一个实例: //创建SessionFactory Configuration config = new C…
关于hibernate save方法未能存储数据入库的处理过程2018年04月18日 10:57:49 守望dfdfdf 阅读数:230更多个人分类: 工作 问题编辑版权声明:本文为博主原创文章,转载请注明文章链接. https://blog.csdn.net/xiaoanzi123/article/details/79876281想要把数据,封装到bean内部,利用hibernate的save方式储存,结果发现虽然没有任何异常,但是表里面并没有出现插入的数据.这时我想到出现这种情况只能是事务上…
每次我讲解SQL Server之前,我都会先简单谈下当我们执行查询时,在SQL Server内部发生了什么.执行一个SELECT语句非常简单,但是执行DML语句更加复杂,因为SQL Server要修改内存中的相关页,并在事务日志里记录整个事务. 介绍完这些特定步骤后,我总会问同样的问题:当我们有个未提交的事务,这个时候刚好有检查点(Checkpoint)发生,SQL Server会崩溃么?在我们数据文件里有我们未提交的数据么?先思考下,然后再写下你的答案. 创建测试场景 现在我想和你一起重建这个…
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------…
--查看锁定的 表select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' --查看数据库IDselect DB_ID()--查看 未提交的事务select * from sys.dm_tran_locks where resource_type = 'OBJECT' and reso…
收到报警某台mysql数据库慢查询数量超过5,登录上去看,发现阻塞的SQL全部是update,处于Updating状态 +---------+------+-----------+------+---------+------+----------+------------------------------------+ | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | +---------+------+-----------…
今天在使用session.save(),进行插入数据操作时,一直没有成功,也没有报错.后来发现是因为没有创建事务,提交事务的原因 你对flush和commit的意思没有理解到:1,flush代表刷新,同步一级缓存中的对象到数据库中,仅仅代表把SQL刷到了数据库中,2,commit代表提交事务,tx.commit之后,之前发送的SQL才真正提交了,数据表里面才有值:3,在默认情况下,commit之前都要自动调用flush,所以:1,session.save();session.flush()只是把…
本文源码:GitHub·点这里 || GitEE·点这里 一.场景案例简介 1.场景描述 分布式事务在业务系统中是十分常见的,最经典的场景就是电商架构中的交易业务,如图: 客户端通过请求订单服务,执行下单操作,实际上从订单服务上又触发了多个服务链请求,基本步骤如下: 客户端请求在订单服务上创建订单: 订单服务调用账户服务扣款: 订单服务调用库存服务执行库存扣减: 订单通过物流服务,转化为物流运单: 这套流程在电商系统中是基本业务,在实际的开发中远比这里描述的复杂. 2.服务时序图 上述1中是业务…
执行了save()方法  sql语句也执行了,但是数据并未插入数据库中 解决方法: 是因为执行了save()方法,也执行了sql语句,但是因为使用的是 @Transactional 注解,不是手动去提交事务,所以这一条语句已经插入到数据库了,但是当前不可见. 所以最后可以采用 this.userRepository.saveAndFlush() 方法,让它及时的flush到数据库中.…
1.save()方法 直接传个user对象 session.save(user); 2.get()方法和load()方法 get(): 传id        session.get(UserInfo.class,id); load(): 传id        session.load(UserInfo.class,id); 区别:假如传的id在数据库没有,get()方法返回值是 null,load()方法返回的是Exception: 3.update()方法 传user属性里面必须有id,不管改…