首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当使用<Version>并在数据库中更改数据时,NHibernate不会抛出StaleObjectStateException

当使用<Version>并在数据库中更改数据时,NHibernate 不会抛出StaleObjectStateException`。

StaleObjectStateException 是 NHibernate 在执行更新或删除操作时,发现数据已经被其他事务更改时抛出的异常。这种情况通常发生在多用户并发操作时,一个用户试图更新或删除已经被另一个用户更改过的数据。为了避免这种情况,可以使用<Version>` 标签来实现乐观锁定。

乐观锁定是一种锁定机制,它假设在大多数情况下,数据不会被其他事务更改,因此不会锁定数据。相反,它在更新或删除数据时检查数据是否已经被其他事务更改,如果已经更改,则抛出 StaleObjectStateException 异常。

在 NHibernate 中,可以使用<Version>标签来实现乐观锁定。<Version>标签指定一个字段,该字段将用于存储数据的版本号。当更新或删除数据时,NHibernate 会检查数据的版本号是否与数据库中的版本号相同。如果不同,则抛出StaleObjectStateException` 异常。

使用<Version>标签可以有效地避免多用户并发操作时的数据冲突问题。但是,需要注意的是,使用<Version> 标签并不能完全替代悲观锁定,因为在某些情况下,仍然需要使用悲观锁定来确保数据的一致性。

相关搜索:当数据库中的对象更改时,LiveData不会更新在数据库中创建新项目时,useEffect不会跟踪更改当与ExecutorService一起使用时,Hibernate不会抛出任何错误,也不会将记录保存在数据库中使用WordPress时,不会在数据库中插入数据当数据库中的更改提交时,我应该使用什么技术来更新切换按钮?如何在数据库中检查列并在使用关系时创建记录使用Laravel Controller时,动态行不会保存在数据库中从InMemory数据库中删除数据时,内存使用量不会减少当数据库中的更改已更新时,ajax返回错误状态200和OK当尝试使用JPA将数据插入到MySQL数据库时,我抛出了异常:列'billing_address‘不能为空使用date_format()函数时,mysql数据库中的数据不会显示在html表中。使用SQL更改wordpress旧图像路径url不会反映在我的数据库中在页面加载时,不会使用angular将数据库中的数据加载到变量当使用timescaledb时,时间序列数据是否应该保存在单独的Postgres数据库中?当使用`logoutOtherDevices`时,Laravel新密码不能持久保存到数据库中当database.yml配置文件中存在多个数据库时,如何使用rake创建数据库?当数据库中有默认值时,我应该如何使用Laravel中的工厂使用数据库(Teradata)中的重复视图时,Tableau数据源列名称已更改当按Enter键时,有没有办法使用slickgrid将数据直接保存到数据库中?当有两个数据源时,如何使用hql从数据库中获取部分对象?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

干货!Hibernate事务and并发问题处理

需要注意的是,在受管理环境,如果Hibernate使用数据库连接来自于应用服务器提供的数据源,Hibernate不会改变这些连接的事务隔离级别。...在数据库表中加入一个version(版本)字段,在读取数据连同版本号一起读取,并在更新数据比较版本号与数据库的版本号,如果等于数据库的版本号则予以更新,并递增版本号,如果小于数据库的版本号就抛出异常...新增数据产生的SQL是: 程序无需为Product对象的version属性显示赋值,持久化一个Product对象,Hibernate会自动为它赋初始值为0。...更新数据产生的SQL是: Hibernate更新一个Product对象,会根据它的id和version属性到相应的数据库定位匹配的记录,如果存在这条匹配的记录,就更新记录,并且把version字段的值加...若找不到匹配的记录,此时Hibernate会抛出StaleObjectStateException

1.8K100

一个比较实用的测试方法

悲观锁的实现,往往依靠数据库提供的锁机制(也只数据库层提供的锁机制才能 真正保证数据访问的排他性,否则,即使在本系统实现了加锁机制,也无法保证外部系 统不会修改数据。...以上这种锁机制一般由 Hibernate 内部使用,如 Hibernate 为了保证 Update 过程对象不会被外界修改,会在 save 方法实现自动为目标对象加上 WRITE 锁。...如一个金融系统,某个操作员读取用户的数据并在读出的用户数据的基础上进 行修改时(如更改用户帐户余额,如果采用悲观锁机制,也就意味着整个操作过 程(从操作员读出数据、开始修改直至提交修改结果的全过程...即为数据增加一个版本标识,在基于 数据库表的版本解决方案,一般是通过为数据库表增加一个 “version” 字段来 实现。 读取出数据,将此版本号一同读出,之后更新,对此版本号加一。...4 操作员 B 完成了操作,也将版本号加一( version=2 )试图向数据库提交数 据( balance=$80 ),但此时比对数据库记录版本发现,操作员 B 提交的 数据版本号为 2 ,数据库记录当前版本也为

1.4K60
  • NHibernate详解

    4.构建一个让NHibernate知道如何连接数据库的配置文件 5.使用NHibernate的API 第一步:写构建表的SQL 这里我们将使用的是一个非常简单的例子...我们将使用如下的一张User表(假定你已经设置好一个数据库—在的例子里我称它为NHibernate)。...MS Sql Server 2000, 但也可以使用任何数据库,只要你有关于它们的基于.Net数据提供驱动程序。...这里我们将映射类型名称(类名,装配件)到我们数据库的User表,这里和Hibernate有一点点的不同。你将不得不告诉NHibernate从何处提取对象。...你的数据库里有一张User表。 现在可以在你的代码恰当简洁的使用NHibernate。简化的版本如下 1. 创建一个Configuration对象 2.

    68530

    2022年了有哪些值得推荐的.NET ORM框架?

    EntityFramework.Exceptions - 您的SQL查询违反SqlServer,MySql或PostgreSQL数据库约束,请对EntityFrameworkCore使用类型化的异常处理...EntityFramework.TypedOriginalValues - 通过某些特殊方法来获得数据库对象在本次修改前的原始值。常见的使用场景是对数据库操作的数据做审计。...主要特点: 支持 CodeFirst 模式,即便使用 Access 数据库也支持数据迁移; 支持 DbFirst 模式,支持从数据库导入实体类,或使用实体类生成工具生成实体类; 支持 深入的类型映射,比如...它被积极开发,功能齐全,并在数千个成功的项目中使用。...用于安全执行 CRUD 操作和查询(使用参数)并以强类型方式检索这些查询结果的非常简单的方法。 与您的数据模型一起工作,而不会强迫您更改您的类。(包含一个小的反射驱动 ORM 层。)

    5.9K11

    NHibernate介绍「建议收藏」

    现代化大型项目通常使用独立的数据库来存储数据,其中以采用关系型数据库居多。...创建数据模型 NHibernate允许直接使用Plain Old CLR Objects (POCOs),而不用通过存储过程来直接和数据库交互。使用POCOs的一个优势在于不用绑定特定的持久化层。...创建NHibernate映射文件 Nhibernate使用XML映射文件来映射POCO到数据库对象。虽然在很多案例这可能是一对一关系,但这并不是必定的。...name表示上面的程序集和命名空间中的类名,table属性告诉NHibernate数据库的哪个表或者视图将被映射。 id元素告诉NHibernate哪个数据库的字段和对应的对象作为一个唯一键来使用。...一旦XML文件创建好了,需要更改XML的生成方式确保它被设置为嵌入式资源,否则NHibernate不会读取这个XML文件,那么映射就不会生效了。

    70320

    2022年了有哪些值得推荐的.NET ORM框架?

    EntityFramework.Exceptions - 您的SQL查询违反SqlServer,MySql或PostgreSQL数据库约束,请对EntityFrameworkCore使用类型化的异常处理...EntityFramework.TypedOriginalValues - 通过某些特殊方法来获得数据库对象在本次修改前的原始值。常见的使用场景是对数据库操作的数据做审计。...主要特点: 支持 CodeFirst 模式,即便使用 Access 数据库也支持数据迁移; 支持 DbFirst 模式,支持从数据库导入实体类,或使用实体类生成工具生成实体类; 支持 深入的类型映射...它被积极开发,功能齐全,并在数千个成功的项目中使用。...用于安全执行 CRUD 操作和查询(使用参数)并以强类型方式检索这些查询结果的非常简单的方法。 与您的数据模型一起工作,而不会强迫您更改您的类。(包含一个小的反射驱动 ORM 层。)

    3.8K20

    聊聊数据库乐观锁和悲观锁

    在写入数据库的时候需要有锁,比如同时写入数据库的时候会出现丢数据,那么就需要锁机制。...数据锁分为乐观锁和悲观锁 它们使用的场景如下: 乐观锁适用于写少读多的情景,因为这种乐观锁相当于JAVA的CAS,所以多条数据同时过来的时候,不用等待,可以立即进行返回。...乐观锁采用版本号的方式,即当前版本号如果对应上了就可以写入数据,如果判断当前版本号不一致,那么就不会更新成功, 比如 update table set column = value where version...='value' for update 这种情况where条件呢一定要涉及到数据库对应的索引字段,这样才会是行级锁,否则会是表锁,这样执行速度会变慢。...repository包:数据库repository service包: 提供服务的service controller包: 控制器写入用于编写requestMapping。

    35220

    聊聊数据库乐观锁和悲观锁

    作者:黄青石 在写入数据库的时候需要有锁,比如同时写入数据库的时候会出现丢数据,那么就需要锁机制。...数据锁分为乐观锁和悲观锁 它们使用的场景如下: 乐观锁适用于写少读多的情景,因为这种乐观锁相当于JAVA的CAS,所以多条数据同时过来的时候,不用等待,可以立即进行返回。...乐观锁采用版本号的方式,即当前版本号如果对应上了就可以写入数据,如果判断当前版本号不一致,那么就不会更新成功, 比如 update table set column = value where version...='value' for update 这种情况where条件呢一定要涉及到数据库对应的索引字段,这样才会是行级锁,否则会是表锁,这样执行速度会变慢。...repository包:数据库repository service包:提供服务的service controller包: 控制器写入用于编写requestMapping。

    52930

    亿级网站大数据量下的高并发同步讲解

    在补充一下(脏数据和不可重复读的相关概念): 脏数据 脏读就是指一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库,这时,另外一个事务也访问这个数据,然后使用了这 个数据...悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能 真正保证数据访问的排他性,否则,即使在本系统 实现了加锁机制,也无法保证外部系 统不会修改数据)。...以上这三种锁机制一般由 Hibernate 内部使用,如 Hibernate 为了保证 Update 过程对象不会被外界修改,会在 save 方法实现自动为目标对象加上 WRITE 锁。...如一个金融系统,某个操作员读取用户的数据并在读出的用户数 据的基础上进 行修改时(如更改用户帐户余额),如果采用悲观锁机制,也就意味着整个操作过 程(从操作员读出数据、开始修改直至提交修改结果的全...即为数据增加一个版本标识,在基于数据库表的版本解决方案,一般是通 过为数据库表增加一个 “version” 字段来 实现。 读取出数据,将此版本号一同读出,之后更新,对此版本号加一。

    1.3K20

    搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (四)配置全攻略

    这篇我们将要讲述怎样通过配置,将三层通过IOC注入。现在我们开始我们的旅程: 第一步:配置实体类【Model】对应的数据库映射文件。...Nhibernate要求映射文件必须按照约定的文件命名格式进行命名。至于放到什么项目中都可以,为了便于理解,我们把数据库表和实体类映射文件放到Model项目中。...操作数据库做铺垫。...Nhibernate就是这样要求的。我们按照模板来配置就行了。User.hbm.xml的配置是根据数据库的表和我们的实体类User进行对应的。这方面不多讲,可以参考Nhibernate的官方文档。...并在Configs添加以上四个xml文件。下面我一一讲述他们的作用。 先看一下目前项目的截图: (1)CommonDao.xml文件是Nhibernate操作数据库的核心的配置。

    1K20

    NHibernate的单表继承模式下通过父类Repository查询子类

    NHibernate中经常遇到继承与关系数据库的ORMapping的问题,我之前的一篇博客(http://www.cnblogs.com/studyzy/archive/2011/08/16/2140675...使用单表继承可以不用Join多个表查询效率高,而且在Domain Model的属性提示到父类或者下降到子类数据库模型不用更改。...其缺点就是一个数据表的列比较多,而且很多列为空,不过现代的数据库对空列的压缩处理已经比较好了,不会产生大量空列造成的性能问题和磁盘空间的浪费。...我们可以将OfficeUser和Teacher都保存到Employee表,然后建立了一个EmployeeRepository,使用Employee作为Query的入口,那么如果要查询Employee表中所有的...Teacher,虽然这在C#是一回事,但是NHibernate会对其理解不一样,所以必须这么写,否则查询不出来。

    35120

    解决并发问题,数据库常用的两把锁!

    作者:黄青石 来源:cnblogs.com/huangqingshi/p/10165409.html 在写入数据库的时候需要有锁,比如同时写入数据库的时候会出现丢数据,那么就需要锁机制。...数据锁分为乐观锁和悲观锁 它们使用的场景如下: 乐观锁适用于写少读多的情景,因为这种乐观锁相当于JAVA的CAS,所以多条数据同时过来的时候,不用等待,可以立即进行返回。...乐观锁采用版本号的方式,即当前版本号如果对应上了就可以写入数据,如果判断当前版本号不一致,那么就不会更新成功,比如 update table set column = value where version...='value' for update 这种情况where条件呢一定要涉及到数据库对应的索引字段,这样才会是行级锁,否则会是表锁,这样执行速度会变慢。...repository包:数据库repository service包: 提供服务的service controller包: 控制器写入用于编写requestMapping。

    97020

    NHibernate总结

    NHibernate不仅仅管理.NET 类到数据库表的映射(包括.NET 数据类型到SQL 数据类型的映射),还提供数据查询和获取数据的方法,大幅度减少我们开发时人工使用SQL和ADO.NET处理数据的时间...NHibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。并请记住NHibernate作为数据库访问层,是与你的程序紧密集成的。...我们可以使用GoF23的单例(Singleton)模式在程序创建ISessionFactory。...映射文件告诉NHibernate它应该访问数据库里面的哪个表及使用表里面的哪些字段。 <?xml version="1.0" encoding="utf-8" ?...我们可以在People.hbm.xml点击右键选择属性修改该文件的生成操作 (5)     NHData.cs对库表People进行增删改查 现在完事具备只欠东风了,开始我们的数据库CRUD操作,在看该文件的代码

    92540

    NHibernate学习笔记之一,Hello world!

    NHibernate是一个面向.NET环境的对象/关系数据库映射框架,主要应用在数据持久层,和其它的ORM框架一样用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。...开始做一个简单的增删改查示例,如图1示例:  图1 1、创建数据库与表,这里假设使用NibernateDemo数据库,Users表包括(id,name,pwd)字段,id是主键自动增长,name与pwd...文件夹的对应数据库配置文件,这里使用MSSQL,所以复制“MSSQL.cfg.xml”,并对NHibernate的配置信息适当修改 。...的工作单元,它是一个持久化管理器,我们通过ISession来从数据库存取数据。...ISessionFactory代表一个数据库,并且使用一个XML配置文件(Web.config或者hibernate.cfg.xml)。

    60020

    杂谈Java高并发

    在补充一下(脏数据和不可重复读的相关概念): 脏数据 脏读就是指一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库,这时,另外一个事务也访问这个数据,然后使用了这个数据。...悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能 真正保证数据访问的排他性,否则,即使在本系统 实现了加锁机制,也无法保证外部系 统不会修改数据)。...如一个金融系统,某个操作员读取用户的数据并在读出的用户数据的基础上进 行修改时(如更改用户帐户余额),如果采用悲观锁机制,也就意味着整个操作过 程(从操作员读出数据、开始修改直至提交修改结果的全过程...即为数据增加一个版本标识,在基于数据库表的版本解决方案,一般是通过为数据库表增加一个 “version” 字段来 实现。 读取出数据,将此版本号一同读出,之后更新,对此版本号加一。...在10秒钟之内 启动UserTest这个类,在到达10秒的时候,我们将会在UserTest.java抛出下面的异常: Exception in thread "main" org.hibernate.StaleObjectStateException

    1.8K50
    领券