- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hibernate_事务处理
Session的get()和load()方法的锁定模式为LockMode.NONE,如果设置为LockMode.UPGRADE就表示采用悲观锁。 它会生成 select .... for update 这样的语句来显示指定采用独占锁来锁定查询的记录。 * * 为了解决多个事务并发会引发的问题,让用户根据需要在事务的隔离性和并发性之间做合理的权衡,数据库系统提供了四种事务隔离级别供用户选择: Read Uncommitted(读未提交数据):它可以防止第一类丢失更新问题,但没有解决脏读以上的并发问题。它的事务隔离性最低。 Read Committed(读已提交数据):它可以防止脏读以下的并发问题,但没有解决不可重复读以上的并发问题。 Repeatable Read(可重复读):它可以防止不可重复读(包括第二类丢失更新)以下的并发问题,但没有解决幻读问题。 Serializable(串行化):提供最严格的事务隔离性。它把事务隔离成连续的一个接一个地执行,而不是并发执行。在这种隔离级别下,不会出现任何的并发问题。 Java高端培训 * 隔离级别越高,越能保证数据的完整性和一致性,但对并发性能的影响也越大。 对于多数应用,可能优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读,而且具有较好的并发性能。 Java高端培训 * 隔离级别 是否会出现第一类丢失更新 是否会出现脏读 是否会出现不可重复读 是否会出现第二类丢失更新 是否会出现幻读 Serializable 否 否 否 否 否 Repeatable Read 否 否 否 否 是 Read Committed 否 否 是 是 是 Read Uncommitted 否 是 是 是 是 每个数据库连接都有一个全局变量@@tx_isolation表示当前的事务隔离级别。 JDBC使用数据库系统默认的隔离级别。 在非托管环境下: Hibernate配置文件中可以显示地设置隔离级别。每一种隔离级别对应着一个正整数: Read Uncommitted: 1 Read Committed: 2 Repeatable Read: 4 Serializable: 8 在hibernate配置文件中设置隔离级别方式: Java高端培训 * session-factory property name=hibernate.connection.isolation2/property /session-factory 在受管理环境中,如果Hibernate使用的数据库连接来自于应用服务器提供的数据源,Hibernate不会改变这些连接的事务隔离级别。这种情况下,应该通过修改应用服务器的数据源配置来修改隔离级别。 Java高端培训 * 当数据库系统采用Read Committed隔离级别时,会导致不可重复读和第二类丢失更新的并发问题。在可能出现这种问题的场合,可以在应用程序中采用乐观锁或悲观锁来避免这类问题。 Java高端培训 * 乐观锁假定当前事务操纵数据资源时,不会有其他事务同时访问该数据资源,因此不作数据库层次上的锁定。 为了维护正确的数据,乐观锁使用应用程序上的版本控制(由程序逻辑来实现的)来避免可能出现的并发问题。 唯一能够同时保持高并发和高可伸缩性的方法就是使用带版本化的乐观并发控制。 版本检查使用版本号(version)或者时间戳(timestamp)来检测更新冲突并防止更新丢失。 Java高端培训 * 原理: 在数据库表中加入一个version(版本)字段,在读取数据时连同版本号一起读取。 在更新数据时先比较新数据的版本号与数据库表中的版本号: 如果等于数据库表中的版本号则予以更新,并递增版本号。 如果小于数据库表中的版本号就抛出异常。 Hibernate在其数据库访问引擎中内置了乐观锁定实现,默认也是选择version方式作为Hibernate乐观锁定实现机制。 步骤: 在持久化类中定义一个代表版本号的属性。类型:long, integer, short 在对象关系映射文件中用version标记来建立持久化类的version属性与表中version字段的映射,一定要定义在id元素后面。 完成以上两个步骤后,在配置文件及程序中就无须作其它设置,按往常一样写操作代码就可以了。 Java高端培训 * Java高端培训 * public class Product implements java.io.Serializable{ private Long id ; private int version; //版本号 private String name; //产品名
您可能关注的文档
最近下载
- 平度2018年蓼兰镇西何家店村滑溪头连片打造美丽乡村示.doc VIP
- 《法律基础知识》试题库(含答案).pdf VIP
- 电商达人LV1-LV2等级提升试卷.docx VIP
- 捷顺智能道闸安装调试说明书a 1.pdf VIP
- 37、餐厅菜品研发流程.pdf VIP
- 平度市2018蓼兰镇西何家店村、滑溪头连片打造美丽乡村示.doc VIP
- 医院设备科干事面试题及参考答案结构化面试题.docx VIP
- 2025庆元旦迎新年晚会PPT模板.pptx VIP
- 2023-2024学年语文三年级上学期《期末测试卷》附答案解析 .pdf VIP
- 房地产市场年报-2020年天津市房地产市场年报.pdf VIP
文档评论(0)