Hibernate乐观锁之Timestamp注意点

Spring MVC+Hibernate+MySQL生产级整合避坑指南 Spring MVC、Hibernate与MySQL的整合并非简单的框架拼接,而是涉及HTTP请求处理、事务管理、ORM映射、连接池配置及数据库底层机制的全链路协同。其核心原理在于各层边界清晰、生命周期可控:Spring MVC负责参数绑定与校验,Hibernate依托一级/二级缓存与脏检查实现对象状态同步,MySQL则通过InnoDB事务隔离、行锁与日志刷盘保障数据一致性。技术价值体现在可维护性提升、并发安全增强与故障可追溯性强化;典型应用场景包括高并发选课系统、金融级后台服务及多环境部署的教务平台。本文 阅读详情
<timestamp name="updDate" column="UPD_DATE"></timestamp>

这个必须跟在id定义之后

这使用AP服务器的时间,而不是DB服务器的时间,来更新数据库。

即更新数据库时使用的是new Date(),而不是sysdate。

如果要使用DB服务器时间来更新DB,必须加上source="db"

此时,hibernate会先从数据库中取出当前时间(select sysdate from dual),然后再用该时间进行更新。

并不是严格意义上的用sysdate更新数据库(update table1 set upd_date=sysdate ……)。

如果更新结果中没有毫秒信息,请检查Dialect,应使用org.hibernate.dialect.Oracle10gDialect。(Oracle9及其后续版本应该都支持毫秒)

不要使用org.hibernate.dialect.OracleDialect,该类已经被Deprecated。

使用org.hibernate.dialect.Oracle10gDialect之后,取DB时间的SQL会变为 select systimestamp from dual。


Hibernate使用Criteria,除了默认的关联条件之外,添加额外的关联条件:createAlias("xxxx", "b",Criteria.LEFT_JOIN,criteria)。


<set name="MUpdateFuncTabs" table="M_UPDATE_FUNC_TAB" inverse="true" lazy="false" fetch="join">

或者criteria.setFetchMode("MUpdateFuncTabs", FetchMode.JOIN)

在一般情况下,只执行一条SQL语句就能把主表和副表的数据都取回来。但是join会导致检索结果增多,结果件数为join之后的件数……

但是如果在criteria中指定了副表的关联查询条件

criteria.createAlias("MUpdateFuncTabs", "tabs", JoinType.LEFT_OUTER_JOIN, Restrictions.eq(MUpdateFuncTab.DEL_FLG, Constant.DEL_FLG_VALID));

那么,就会变成fetch="select"一样的效果,将会执行N条SQL语句以取得副表的数据。



JPA乐观锁异常深度解析:从原理到高并发实战解决方案 乐观锁是一种基于版本号或时间戳的并发控制机制,其核心原理是在事务提交时验证数据在读取后是否被其他事务修改,以此避免更新丢失问题。这一机制在JPA中通过@Version注解实现,为高并发场景下的数据一致性提供了轻量级保障。其技术价值在于平衡了并发性能与数据一致性,避免了悲观锁带来的吞吐量下降。典型应用场景包括电商库存扣减、票务系统座位锁定等多用户同时更新场景。当并发冲突发生时,系统会抛出OptimisticLockingFailureException,开发者需要结合重试策略、业务逻辑拆分等工程实践进行妥善处 阅读详情

相关推荐

Hibernate不是SQL生成器:Java ORM思维范式转型指南

ORM(对象关系映射)是Java后端开发的核心范式,其本质是在面向对象模型与关系型数据库之间建立语义一致的运行时契约。Hibernate作为最成熟的JPA实现,绝非简单的SQL封装工具,而是依托Session生命周期、一级/二级缓存、代理机制与脏检查等底层原理构建的持久化上下文系统。理解@Entity与@OneToMany背后的运行时语义、掌握fetch策略与事务边界的协同关系,是避免LazyInitializationException和N+1查询等典型问题的技术前提。本文聚焦Hibernate核心机制解

weixin_33713350的博客 422

select sysdate from dual

<br />oracle中格式化输出日期:<br /> <br /> <br />默认的是:<br /> <br />select  sysdate from dual';<br /> <br /> 2011年 01月 29日 星期六 01:40:18 CST<br /> <br /> <br />我们想格式化输出的时候可以通过两种方式:<br /> <br />1,select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')  now from dual;<br /><b

DreamDB的专栏 1万+

TimeStamp(用java实现时间戳)

TimeStamp(用java实现时间戳)

【MySQl】MySQl中的乐观锁是怎么实现的

mysql中的乐观锁是怎么实现的?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

DreamSun的博客 8262

COMSOL 6.4安装全攻略:安装包获取、许可证配置与避坑指南

多物理场仿真是现代工程与科研中不可或缺的技术手段,其核心原理在于将电磁、结构、流体、传热等不同物理过程的耦合效应置于统一环境中求解,从而真实模拟复杂系统行为。这类仿真平台能大幅提升产品研发与设计验证效率,广泛应用于电子散热、声学分析、电力设备等领域。在部署最新版本仿真软件时,安装与许可证配置往往成为影响工作效率的关键环节。本文系统梳理COMSOL 6.4在Windows平台的安装全流程,涵盖安装包获取、系统依赖准备、许可证配置、常见报错排查等实用经验,帮助工程师与科研人员一次性完成环境搭建,把更多时间投入真

weixin_30000735的博客 1317

椭圆曲线点加的推导公式(一)

椭圆曲线点加推导过程

qq_32100199的博客 1515

Hibernate的org.hibernate.dialect.Oracle9Dialect错误

新学Hibernate,连接mySQL一切正常,连接oracle时出错提示: 2012-09-05 11:02:17,055 WARN [org.hibernate.dialect.Oracle9Dialect] - The Oracle9Dialect dialect has been deprecated; use either Oracle9iDialect or Oracle10

1万+

第三方系统(异构系统)基于token身份认证方式访问Ecology9的Restful接口Ecology9服务器配置部分

通过Token的认证方式调用Ecology9系统Restful业务接口服务器配置部分

svsou的专栏 2173

Hibernate 3.6.5 SQL 方言(hibernate.dialect)

RDBMS Dialect DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS390 org.hibernate.dialect.DB2390Dialect PostgreSQL org.hib...

jbutton的专栏 1404

从数学到机床:RTCP背后的几何变换与工业实现

本文深入解析RTCP(Rotary Tool Center Point)技术在五轴数控加工中的核心作用,通过几何变换与运动学原理实现刀尖点跟随,确保加工精度。从数学基础到工业实现,详细探讨了算法架构、机床结构适配及精度保障方法,为数控系统开发和高效加工提供关键技术支撑。

jump7的博客 258

搭建PX4开发系统(Ubuntu 22.04)

本文是《从零开始学 PX4 无人机开发》系列第二篇,适合开发者在 Ubuntu 系统下快速搭建 PX4 编译与仿真环境,支持 QGroundControl、Gazebo、MAVSDK 等完整工具链。

qq_15856721的博客 4195

mysql乐观锁总结和实践:用version或者时间戳

2.乐观锁定的第二种实现方式和第一种差不多,同样是在需要乐观锁控制的table中增加一个字段,名称无所谓,字段类型使用时间戳(timestamp), 和上面的version类似,也是在更新提交的时候检查当前数据库中数据的时间戳和自己更新前取到的时间戳进行对比,如果一致则OK,否则就是版本冲突。但是如果发生有不同的业务操作对同一版本的数据进行修改,那么,先提交的操作(图中B)会把数据version更新为2,当A在B之后提交更新时发现数据的version已经被修改了,那么A的更新操作会失败。

康宁的博客 2039

手把手教你学simulink(57.3)--电励磁同步电动机场景示例:基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论需求分析电励磁同步电动机(Electr

MHD0815的博客 503

hibernate oracle timestamp(6),Hibernate乐观锁之Timestamp注意点

lt;timestamp name=updDate column=UPD_DATEgt;lt;/timestampgt; 这个必须跟在id定义之后 这使用AP服务器的时间,而不是这个必须跟在id定义之后这使用AP服务器的时间,而不是DB服务器的时间,来更新数据库。即更新数据库时使用的是new Date(),,而不是sysdate。如果要使用DB服务器时间来更新DB,必须加上source="db"此...

weixin_33531560的博客 231

车载以太网测试-1【TC8物理层测试基础】

车载以太网物理层是车载网络的基础,负责将数字数据转换为适合在物理介质上传输的信号,并确保数据传输的可靠性、稳定性和高效性。它在车载网络系统中扮演着至关重要的角色,直接影响着车辆内部通信的性能和效率。1. 主要物理层标准车载以太网标准由IEEE 802.3和标准名称速率线缆类型编码方式应用场景100BASE-T1100 Mbps单对非屏蔽双绞线车载摄像头、传感器1 Gbps单对屏蔽/非屏蔽双绞线自动驾驶域控制器、高清视频10BASE-T1S10 Mbps单对双绞线幅移键控(ASK)

车载网络测试工程师的博客 4386

RK3568平台开发系列讲解(项目篇)手写数字识别

📢 本篇章带大家基于飞桨(PaddlePaddle),完成一个简单的手写数字识别任务。

内核笔记 1182

Hibernate 悲观锁和乐观锁详解

首先我们来说下锁(locking)的概念: 这个概念在我们学习多线程的时候曾经接触过,其实这里的锁和多线程里面处理并发的锁是一个道理,都是暴力的把资源归为自己所有。这里我们用到锁的目的就是通过一些机制来保证一些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无法被其他程序修改。Hibernate支持两种锁机制:即通常所说的“悲观锁(Pes...

ai8717995的博客 568

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java Hibernate 配置 SqlServer数据库 timestamp乐观锁注意事项

在SqlServer 2008中创建一个表中存在timestamp(最后修改时间)类型的字段作为乐观锁版本控制时,若在XXX.hbm.xml配置文件中使用标签来映射该字段类型,并且通过session.save();方法进行数据插入操作时,会提示不能显示插入时间戳; 如何解决该方法?因为SqlServer2008数据库会自动对timestamp字段自动赋值,所以在映射文件中映射timestamp字

changeoneself的博客 677

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

hibernate实现乐观锁的方法

1、使用version或者timestamp(推荐version,因为timestamp只能精确到秒,且必须保证数据库服务器的时间和应用程序的时间一致)。 2、如果APP是基于已有的数据库,而数据库表中不包含代表版本或时间戳的字段,hibernate提供了其他实现乐观锁的方法,把元素的optimistic-lock属性设为"all": 注意:如果把元素的optimistic-lock属

Crazy Android 2178

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

hibernate乐观锁

[size=large]乐观锁的作用[/size] 乐观锁的主要作用是为了解决事务并发带来的问题。相对于悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。 悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本(Version)...

skyuck的专栏 298

Spring Boot 3.x 乐观锁 @Version 字段的初始化时机问题详解与解决方案

Spring Boot 3.x @Version字段初始化问题解析 乐观锁在Spring Boot 3.x(Hibernate 6.x)中存在版本字段初始化时机问题,主要表现为: NPE风险:包装类型字段在未持久化时为null 版本冲突:手动设置版本号导致乐观锁失效 初始化异常:数值类型默认为0可能误判状态 核心解决方案: 优先使用基本类型(int/long)避免null 禁止手动修改@Version字段 批量操作时确保实体状态一致 使用时区无关类型(Instant)替代Timestamp 遵循这些规范可有

深山技术宅的博客 858

基于乐观锁的高并发游戏战斗系统架构设计与实践

并发控制是分布式系统设计的核心概念,通过协调多线程或多进程对共享资源的访问来保证数据一致性。乐观锁作为一种无锁并发控制原理,采用“先操作后验证”的思想,假设冲突发生概率较低,在提交时通过版本号或时间戳机制检测数据变更。这种技术价值在于避免了传统悲观锁的性能瓶颈,特别适用于读多写少的高并发场景。在游戏开发领域,乐观锁的应用场景尤为广泛,能够有效解决多人实时对战中的战斗状态同步难题。本文基于版本号机制和JPA注解,深入探讨了如何构建高可用的游戏战斗系统架构,通过Redis缓存优化和指数退避策略,自然收敛到高并发

weixin_30527323的博客 320

Hibernate入门到开发四之基于Annotations的映射(简单属性)

一、注意: 1.要么全部声明于属性上方,要么全部声明于对应的get函数上. 2.注意关键字的映射永远失败(注意hibernate的版本适配的字段,如user order longtext) 二、基本注解 三、入门案例【所有的注解重要的说明都在里面了】/** * @Entity:声明一个映射实体对象,位于class的上方 * 使用注解的方式,必须写该

xiaozhegaa的博客 403

高并发场景下资源公平分配系统设计:从乐观锁到Redis的实战方案

在分布式系统与高并发编程领域,资源竞争与分配是核心挑战之一,其本质在于解决多线程或多进程环境下对有限共享资源的访问冲突。其基本原理是通过锁机制、原子操作或队列等技术,协调并发请求的执行顺序,确保数据的一致性与业务的正确性。这项技术的核心价值在于保障系统的强一致性、公平性与高可用性,避免超卖、数据错乱等经典问题。典型的应用场景包括电商秒杀、票务抢购、活动报名、任务调度等瞬时高流量业务。本文以社区活动报名这一具体场景为例,深入探讨了在存在复杂业务规则(如“邻居”约束)下,如何设计健壮的竞斗分配机制。文中详细对比

weixin_34184158的博客 405

论坛系统(Spring+Struts+Hibernate)

学web后台开发已经有一段时间了,是时候做一点小总结。前段时间学习了一个小项目——论坛系统,是基于Spring+Struts1+Hibernate框架开发的,虽然Struts1框架已逐渐比较少人用了,但作为初学者我觉得还是有必要了解一下。在实现完这个小系统后,我想把它改成基于Struts2实现的,毕竟Struts2比Struts1优秀得多。但了解到目前很多企业公司都采用了Spring+Spring

hjy的博客 4737
上一篇: Linux下访问windows共享文件夹
下一篇: SVN不提交特定的文件
有巢鱼
博客等级 码龄23年 5粉丝 25原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值