注意:要在user表中增加一个字段:version int
User.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.shiryu.otm.User" table="user" dynamic-update="true" dynamic-insert="true" optimistic-lock="version"
>
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<!-- 使用乐观锁 -->
<version name="version" column="version" type="java.lang.Integer" />
<property name="name" type="java.lang.String">
<column name="name" length="50" />
</property>
<property name="age" type="java.lang.Integer" column="age" />
<set name="addresses" table="address" cascade="all" order-by="address desc">
<key column="user_id"></key>
<one-to-many class="com.shiryu.otm.Address" />
</set>
</class>
</hibernate-mapping>
OptimisticlLockingTest.java
package com.shiryu.otm;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Expression;
//乐观锁 Optimistic Lock
public class OptimisticLockingTest {
public static void main(String[] args) {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(User.class);
criteria.add(Expression.eq("name", "zhaiyu"));
List l = criteria.list();
User user = (User) l.get(0);
Transaction tr = session.beginTransaction();
user.setAge(21);// 更新age字段
tr.commit();
session.close();
// 每次对数据库进行更新时,数据库中version都在递增
// 现在我们尝试在tr.commit之前,启动另外一个Session,对zhaiyu用户进行操作,模拟并发时的情景
Session session1 = sessionFactory.openSession();
Criteria criteria1 = session1.createCriteria(User.class);
criteria1.add(Expression.eq("name", "zhaiyu"));
Session session2 = sessionFactory.openSession();
Criteria criteria2 = session2.createCriteria(User.class);
criteria2.add(Expression.eq("name", "zhaiyu"));
List userList1 = criteria1.list();
List userList2 = criteria2.list();
User user1 = (User) userList1.get(0);
User user2 = (User) userList2.get(0);
Transaction tr1 = session1.beginTransaction();
Transaction tr2 = session2.beginTransaction();
user1.setAge(26);// 更新age字段
tr1.commit();
user2.setAge(44);// 更新age字段
tr2.commit();// 系统出现StaleObjectStateException异常,并指出版本检测失败
}
}
相关推荐
基于STM32F103与AD8232的便携式心电监测系统设计与实现
本文详细介绍基于STM32F103微控制器与AD8232心电传感器模块的便携式心电监测系统设计与实现。系统通过ADC采集心电信号,结合软件滤波算法处理基线漂移和工频干扰,并利用OLED屏幕实时显示波形,具有低成本、高实用性的特点,适用于健康监测与嵌入式学习。
HibernateOptimisticLockingFailureException
今天用 getHibernateTemplate().saveOrUpdateAll(list); 时报如下错误,org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; ac
python调用海康工业相机并用opencv显示(整体实现)
python语言调用海康机器人(hikrobotics)工业相机 第一章 Python 语言下连接海康工业相机,并获取数据 文章目录 系列文章目录 前言 目录 python语言调用海康机器人(hikrobotics)工业相机 文章目录 前言 一、底层接口的准备 二、使用步骤 1.引入库 2.枚举设备 3.判断设备类型 4.输入连接设备 5.创建相机实例并创建句柄 6.打开设备 7.获取相关参数 8.主动获取图像 9.开启取流并获取每张.
产生异常:HibernateOptimisticLockingFailureException
org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hib...
研发工作量科学量化评估模型:从多维系数到等级落地指南
摘要:本文提出了一套基于多维系数的科学量化评估模型,用于精准评估软件开发工作量。该模型从需求复杂度、技术难度、质量要求和依赖风险四个核心维度进行量化评估,通过系数乘积计算综合工作量。文章详细说明了各维度的系数区间划分标准,并演示了从基础工作量估算到综合系数计算的具体步骤。该模型通过结构化评估过程,将主观经验转化为客观量化指标,帮助团队提高工作量评估的准确性,增强项目交付的可预测性。其价值在于使评估过程透明化、结构化和可追溯,从而减少项目延期风险,优化资源规划。
Livox-avia+FAST-LIO麻瓜使用教程
激光雷达 SLAM Fastlio 安装
Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1!!!
org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hib...
JAVA:Spring Boot3 集成 ShardingSphere 实现数据分库分表
本文介绍了基于Spring Boot和ShardingSphere-JDBC实现分库分表与读写分离的解决方案。针对高并发、大数据量场景下单库单表的性能瓶颈,通过配置ShardingSphere-JDBC实现:1)订单表按user_id和order_id分片到两个库和两张表;2)读写分离,写操作路由至主库,读操作在从库间负载均衡。方案使用Druid连接池优化,支持业务透明,无需修改SQL。
org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException 解决办法
org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException 解决办法 assigned , native , identity 区别
掌握C++新特性中智能指针的综合指南
本文是一篇关于C++中智能指针的综合指南,旨在深入探讨现代内存管理的核心概念和技术。智能指针是C++中一种强大的工具,可以帮助开发人员更安全、高效地管理内存资源。通过详细解析各种类型的智能指针,包括unique_ptr、shared_ptr和weak_ptr,读者将了解它们的原理、用法和适用场景。本文将重点介绍智能指针的优势,如自动内存释放、避免内存泄漏和循环引用等问题。此外,还将讨论智能指针与传统指针的区别,并提供一些最佳实践和实用技巧,帮助读者在实际项目中正确、高效地使用智能指针。
《我的Classic Platform AUTOSAR之路》 BSWM 模式管理(二)ESH
只有 PostRun 和 wakeup 才能切换到 RUN,其他状态需要先切换到 wakeup 模式。进入 RUN 模式需要打开通信 allow,退出 Run 需要 disable 通信 allow。Prepareshut 与 dem_shutdown 绑定,如果没有 dem 配置,不会生成。除了 Init 模式下,其他模式下都要检查 ECU 的唤醒源和通信 pending 需求。与 ECUM 相关,整个 ECU 状态管理的状态机制。postrun 可以不配置,需要根据自己的需求使能。
今天碰见了一个关于Hibernate的异常org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException
异常信息为:org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException : Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception
69、SAP数据库归档重做日志备份策略与工具详解
本文详细解析了SAP数据库归档重做日志备份的重要性及策略,介绍了SAP提供的备份工具brarchive及其配置和使用方法,探讨了BRBACKUP与BRARCHIVE的联合运行、一致在线备份、备用数据库备份场景以及备份策略的综合应用与优化。此外,还分析了备份过程中常见问题的解决方法、备份监控与评估流程、与第三方备份解决方案的集成方式,以及未来备份技术的发展趋势和应对策略。通过合理运用这些策略和工具,可以有效保障SAP数据库的安全性和可恢复性。
Hibernate 中的悲观锁( pessimistic lock )和乐观锁( optimistic lock )
悲观锁( pessimistic lock ): 通常是由数据库机制实现的,在整个过程中把数据锁住(查询时),只要事务不释放(提交或回滚),任何用户都不能查看和修改。锁主要是解决并发性问题。 通过 jdbc 实现时 sql 语句只要在整个语句之后加 for update 即可。例如: select …for update Hibernate 中加载一个持久化类时需
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
Hibernate中的悲观锁(pessimistic lock)和乐观锁(optimistic lock)
Hibernate中的悲观锁(pessimistic lock)和乐观锁(optimistic lock)悲观锁(pessimistic lock):<br />通常是由数据库机制实现的,在整个过程中把数据锁住(查询时),只要事务不释放(提交或回滚),任何用户都不能查看和修改。锁主要是解决并发性问题。<br />通过jdbc实现时sql语句只要在整个语句之后加for update即可。例如:select …for update<br />Hibernate中加载一个持久化类时需要用load方法这个方法是对普
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
hibernate 关联update list_Hibernate:悲观锁和乐观锁
业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的 “锁” ,即给我们选定的目标数据上锁,使其无法被其他程序修改。Hibernat...
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
java乐观锁 事务_Java 中的悲观锁和乐观锁的实现
锁(locking)业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无法被其他程序修改。Hi...
Hibernate Optimistic Lock without a Version (or Timestamp)
Last week, I taught Intertech’s Complete Hibernate to a group of students that already had a bit of experience with Hibernate (on the job training as they took over an existing application). Because...
Hibernate 中optimistic_lock 的配置
在hibernate.cfg.xml中加入以下代码 name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory > 在托管环境下,Hibernate不能设置数据库事务的隔离级别,应该让托管的容器去设置这个隔离
Lock Mode Type 之 Optimistic 使用场景
转载自:
Hibernate_Optimistic Lock_乐观锁
2019独角兽企业重金招聘Python工程师标准>>> ...
optimistic-lock hibernate java_月光软件站 - 编程文档 - Java - Hibernate的锁
Hibernate的加锁模式有:Ø LockMode.NONE : 无锁机制。Ø LockMode.WRITE :Hibernate在Insert和Update记录的时候会自动获取。Ø LockMode.READ : Hibernate在读取记录的时候会自动获取。以上这三种锁机制一般由Hibernate内部使用,如Hibernate为了保证Update过程中对象不会被外界修改,会在save方法实现...
Hibernate的锁
Hibernate的加锁模式有:Ø LockMode.NONE : 无锁机制。Ø LockMode.WRITE :Hibernate在Insert和Update记录的时候会自动获取。Ø LockMode.READ : Hibernate在读取记录的时候会自动获取。以上这三种锁机制一般由Hibernate内部使用,如Hibernate为了保证Update过程中对象不会被外界修改,会在save方法实现
What is optimistic locking in Hibernate
What is optimistic locking in Hibernate
Hibernate 中的 session.lock() 方法有什么作用?
Hibernate 中的 session.lock() 方法有什么作用?
hibernate之乐观锁(Optimistic Locking)
相对于悲观锁,乐观锁采取了更加宽松的加锁机制,悲观锁大多数是依赖于数据库,如果对于一个长事务来说,这样的开销会很大! 如:在银行系统中,一个人想从银行取钱,他的公司正好在这个时候往他的卡里打钱,如果使用悲观锁的话,会将它的帐号暂时锁死,一个人还好,如果要是有成千上万个巧合呢?这样的话,银行的数据库的压力会很大; 乐观锁机制在一定程度上解决了这个问题,乐观锁,大多是基于数据版本(ve...
737



被折叠的 条评论
为什么被折叠?



