kodojdo指南第九章

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

第九章  事务

  事务用来保证事务完整性.它把操作集中到一个工作组,这个组里的操作要么全部成功,要么全部失败.事务有几个特性
  1)原子性:原子性指事务的要么全部成功-要么全部失败的属性.要么事务中的每个更新数据的操作都成功完成,要么全部失败.而不管数据在数据库中的原始状态是怎样.事务不可能部分地成功.

  2)一致性.每个事务使数据库的数据从一种连贯状态到另一种连贯状态.

  3)隔离性.事务彼此之间隔离.当你从事务读取持久化数据的时候,如果其他事务没有完成,你并不能看到被该事务导致的数据的变化.同样地,你在一个事务的更新操作和另一个并发事务的更新操作并不冲突.冲突的形成依赖于你使用优化事务还是使用非优化事务.下节会介绍这两种类型. 

  4)耐久性.成功事务的作用是耐久的.对持久化数据的更新持续到数据集的活动周期.(翻译得不好)

  这几种属性合称事务的"酸性".要理解为什么对维护数据完整性来说这些属性如此重要,考虑下面的例子:
  假设你创建一个管理银行帐户的应用程序.这个程序包含一种方法,把一个帐号的资金转到另一个.看起来应该这样:

  现在假设A用户想转帐100元给b用户.没问题,你简单调用transferFunds 方法,以帐户a作为form参数.以b帐户作为to参数.100元作为总额.方法的第一句执行.从a帐户里减去了100元.不过,发生了意外的情况.也许是硬件的故障.你的方法没有完成.
  现在你要面对这种情况,100元消失了.应该"感谢"你的函数,a帐户减少了100元,而这100元并没有转到b帐户.数据库处于不一致状态.
  现在事务的重要性清楚了.假如transferFunds的两行方法一起放置在一个事务里,就不可能出现只有方法的第一行成功的情况.当意外发生时,要么转帐成功,要么根本不转帐.钱不会消失到空气里,数据库永远不可能处于非一致性状态.

  9.1 事务类型

(这里应该是教程有错)
  事务有两种主要类型.乐观的和悲观的.每种类型都有其优缺点:
 
  当悲观事务执行时,它会锁住数据库.阻止其他并发事务使用同样的数据.这防止了事务的冲突.不过消耗了数据库的大量资源.加之,锁住数据会导致死锁.有这么一种情况:两个事务都在等待对方完成后释放数据的锁,死锁的结果依赖于数据库:通常是在指定的时间流逝之后,事务会强迫性的回滚,并且会抛出异常.

  乐观事务消耗较少的资源.代价是降低可靠性.因为乐观事务并不锁住数据记录,可能两个事务会同时修改同一持久信息,在第二个事务提交之前,并不检查冲突.此时,第二个事务会知道另一个并发的事务修改了同样的记录(通常通过时间戳或者版本体系),抛出适当的异常.要注意到乐观事务仍然维护数据完整性,只不过在严重的并发情况下很可能失败.

  9.2 JDO的事务接口

  事务接口管理JDO里的事务.这个接口包括许多对属性操作的类JAVA BEAN 风格的getter和setter方法,标准的事务划分方法和测试事务是否活动的方法.

  事务的 NonTransactionalRead, NonTransactionalWrite, RetainValues, RestoreValues, 和Optimistic 对应在PersistenceManagerFactory 一节的设置属性.最终的属性如同步还没有介绍.这个属性允许你用一个javax.transaction.Synchronization实例关联事务.事务完成之后,事务会告诉同步实例,所以你可以在提交或者回滚时实现自定义行为.参考同步的javadoc文档获得更详细信息.

  begin,commit和rollback方法给事务分界.顾名思义,begin开始一个事务,commit尝试把事务对数据库的操作提交,rollback放弃事务.此时数据库回复到事务开始前的状态.如果事务提交过程中发生严重的错误,JDO会自动回滚.然而,假如你主动执行回滚操作,可以释放所占用的一些资源.

  最后,如果事务处于活动状态,isActive 方法返回true.(begin方法的调用比commit和rollback要频繁点).否则返回false.

山东专升本计算机网络基础知识点 --- 计算机网络基础 计算机网络是指将一群具有独立\textcolor{WildStrawberry}{独立}独立功能的计算机通过通信设备及传输媒体等互联起来,在通信软件的支持下,实现计算机间资源共享、信息交换或协同工作\textcolor{WildStrawberry}{资源共享、信息交换或协同工作}资源共享、信息交换或协同工作的系统。计算机网络是计算机技术和通信技术紧密结合的产物\textcolor{WildStrawberry}{计算机网络是计算机技术和通信技术紧密结合的产物} 阅读详情

相关推荐

DolphinScheduler任务状态异常排查:从僵尸任务到数据库修复全流程

本文详细介绍了DolphinScheduler中僵尸任务的识别、诊断与修复全流程,包括数据库层面的SQL操作指南、系统恢复验证方法以及预防措施。针对任务状态异常问题,提供了从基础排查到高级源码分析的完整解决方案,帮助运维人员有效管理系统资源和工作流调度。

weixin_27966471的博客 133

使用Ant配置Weblogic环境

  使用Ant配置Weblogic环境,使开发者可以尽快投入工作。1。建立domain 和 server。使用 wlserver  task2。配置连接池和Datasource3。deploy 使用 wldeploy原文:http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=7参考:http://e-docs.be

WalkingWithJava 1813

光学遥感显著目标检测初探笔记总结

一张图片里最吸引注意力的部分就是显著性物体,其实是模拟人的一个注意力机制。目标是希望通过计算机的方法让我们自动定位和模拟人的这种感知能力,从而去定位场景中的一个让人感兴趣的目标。

醋酸洋红的博客 2077

Ant 常用Task

Installation: 1. Set the ANT_HOME environment variable to point to this location. 2. Set the JAVA_HOME environment variable to point to the JDK location. 3. Add ANT_HOME/bin to your

WalkingWithJava 1790

【保研经验】北科自动化到北大工学院

作者:办公室某学长 谢邀。。。作为拖延症晚期患者,希望能在我科开学前写完。 先简单介绍一下我的保研过程,申请了清华叉院&北大叉院大数据&北大信科计算机夏令营,三者都没入营;申请了自所夏令营(自所来宣讲时未交简历,这是重大错误),给了第二批补录但没去;最终九推去了北大工学院。我的这次保研最终成功的经历可以说有一定运气成分,不具有普适性,但在前期准备过程中还是有经验可以分享的。 ...

ruanjianbu的博客 1796

从亚稳态到稳定传输:深入解析CDC跨时钟域同步的核心技术与设计实践

本文深入解析了CDC(跨时钟域同步)技术的核心问题与解决方案,重点探讨了亚稳态现象及其危害,详细介绍了同步器设计、MTBF计算方法以及单bit和多bit信号同步的实战技巧。通过Verilog代码示例和工程实践案例,帮助读者掌握从亚稳态到稳定传输的关键技术,提升数字电路设计的可靠性。

weixin_32822843的博客 247

配置PointBase

主要文件:只有三个pbclient.jar,pbembedded.jar 和 pbtools.jar    设置pointBase环境变量:   setPBEnv.bat   set PB_HOME=D:/Devs/pointbaseset OLDCP=%CLASSPATH%set CLASSPATH=%PB_HOME%/li

WalkingWithJava 1764

Oracle EBS R12 AR 标准发票 核心表结构

​ Oracle EBS R12 AR 标准发票 核心表结构 聚焦手动标准发票 (Standard Invoice),按头→行→分配→税→收款计划→会计分录→历史分层,标注主键、外键、关键字段、业务含义,同时说明表间关联关系,适配开发 / 运维 / 数据核对场景。 一、主数据层(发票头 + 行,核心业务表) 1. RA_CUSTOMER_TRX_ALL 【发票头表】 作用:存储整张发票头部信息,一张发票对应一条记录,AR 发票主表。 主键:CUSTOMER_TRX_ID (唯一 ID,系统内部键) 业

金牌架构师 282

微软研发致胜策略读书笔记

项目的讨论   精确的项目目标   作为主管,值得你好好花时间去设定你的项目目标。目标定下来之后,你就会清楚哪些工作该做,那些工作不该做。例如你是基础函数库的主管,如果你确定了“只有所有模块都使用的函数才是要开发的函数”的原则,那么某个模块要求你开发的工作,就不是你的目标了。  每天花10-15分钟想想目标,并且想些解决的小窍门。例如作者某天是这样想的:

WalkingWithJava 1762

荒岛逃生游戏

正负表示逃生方向(正表示向右逃生,负表示向左逃生),绝对值表示战斗力,越左边的数字表示里左边港口越近,逃生方向相同的人永远不会发生决斗。- 如果左逃生者的战斗力大于右逃生者,则左逃生者获胜,减少其战斗力,并将右逃生者出栈。- 处理完所有输入后,统计仍在右逃生者栈和左逃生者栈中的战斗力,即可得到成功逃生的人数。- 如果左逃生者的战斗力小于右逃生者,则右逃生者获胜,减少其战斗力,左逃生者出局。- 向左逃生:从右逃生者栈中取出元素,与当前逃生者进行决斗。- 继续进行决斗,直到没有右逃生者或左逃生者的战斗力用尽。

面试高手的博客 2102

2024华为OD机试真题-矩阵匹配-C++-OD统一考试(C卷D卷)

​从一个 N * M(N ≤ M)的矩阵中选出 N 个数,任意两个数字不能在同一行或同一列,求选出来的 N 个数中第 K 大的数字的最小值是多少。输入描述输入矩阵要求:1 ≤ K ≤ N ≤ M ≤ 150

goldarmour的博客 279

Duke's Bookstore(Servlet 版本)笔记

1 新增的event模型:通过设定Listener,可以在Servlet的初始化之前和之后做某些事情.这是事件模型在Servlet中的应用.  在访问/bookstore1/enter之后, ContextListener 构造了一个DB,并且把它放到ServletContext中去,这样BookstoreServlet可以从Context中得到这个初始化的DB   核心代码如下:

WalkingWithJava 1671

【以太网硬件六】1000base-T物理层编码究竟是怎么编的?

详述1000base-T物理层4D-PAM5的编码过程

highman110的博客 5324

读写文本的类

AbstractTextOperator.java/* * Package : diegoyun.work * File : AbstractTextOperator.java * Create by : diegoyun * Create on : 2005-1-2 0:44:31 * --------------------------- */package diegoyun.work;

WalkingWithJava 1538

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

kodojdo指南第十章

第十章 扩展  扩展是给定的能持久类的所有持久化实例的逻辑视图.扩展可以从PersistenceManager中得到,通常要来指定查询的候选对象.  getCandidateClass 方法返回扩展实例的能持久类.hasSubclasses 指出是否包括子类实例    你可以使用iterator 方法得到一个扩展的含有所有对象的枚举器.使用它通常会消耗数据库资源,所以当你使用完毕之后,

WalkingWithJava 1382

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

kodojdo指南十一章

第十一章  查询  你可以从PersistenceManager中得到查询实例.查询可以筛选符合某些标准的一批候选对象.这个筛选过程可能在数据库中进行,或者在内存中执行.JDO没有明文规定查询机制.许多JDO实现品会根据情况混合使用内存执行方式和数据库执行方式.  现在开始研究查询接口.你会发现自己对将讨论的东西迷惑不解.这是可预料的.我们会通过一些具体的例子来说明.11.1 必需的查询元

WalkingWithJava 1348

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

kodojdo指南第十二章

第十二章  结论  本教程对JDO的规范作了个大略的介绍.Kodo JDO 指南会通过step-by-step的建立JDO应用程序来继续你的JDO学习.最后,Kodo JDO 参考指南包含所有SolarMetric Kodo JDO实现细节和开发工具.

WalkingWithJava 1284

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 198

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 130

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 456

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 409

数据库主键选型指南:BIGINT vs VARCHAR

主键选型关乎数据库性能与架构演进。BIGINT(如雪花算法)在顺序写入、二级索引开销和分布式生成上优势显著,适合高并发核心链路;而传统 VARCHAR UUIDv4 因随机性导致频繁页分裂、存储膨胀,性能堪忧。UUIDv7 通过时间戳有序性实现高效追加写入,结合 BINARY(16) 存储可兼顾性能与安全,成为现代微服务新选择。关键在于:主键应稳定、无业务含义,优先选用趋势递增的紧凑类型,并根据场景合理采用双主键模式或 ULID 等替代方案。

小李同学的博客 301

自动化运维选型:四条技术路线的能力边界,以及它们为什么不能互相替代

自动化运维怎么选型?拆解配置管理、基础设施即代码、作业调度与场景化编排四条技术路线边界,分析账本归属与时间语义差异,给出四种架构组合与判断点,帮企业看清为何不能互相替代。

trainsignalcn的专栏 326

C++算法(七)

C++ stack算法题和一些客观题

2503_94479566的博客 369

不用再为文本搜索单独维护一套系统!全文检索深度解析

为了给商品、客服工单或者企业知识库增加一个搜索框,企业往往需要在业务数据库之外,再部署一套Elasticsearch。数据库保存商品、订单和用户等真实业务数据,搜索引擎保存另一份文本索引;两套系统之间,还需要通过CDC、消息队列或者同步程序持续传输数据。一个看似简单的搜索需求,最后可能变成两套集群、两份数据和一条必须保持稳定的数据链路。由此产生的问题并不少:数据库已经完成更新,搜索结果却可能尚未同步;业务查询同时涉及文本、库存、权限和订单状态时,应用需要在两个系统之间来回组合结果;

TiDB 社区干货传送门 247

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 151
上一篇: kodojdo指南第八章
下一篇: kodojdo指南第十章
云哥
博客等级 码龄22年 2粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值