kodojdo指南第六章

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

 第六章 JDOHelper

  上图列出了JDOHelper最常用的方法。详细的API信息请参考类的Javadoc文档
  应用程序使用JDOHelper进行三类操作:能持久化操作,生存期操作和创建PersistenceManagerFactory

。我们逐一研究。

6.1 能持久化操作
 
  前两个操作makeDirty和getObjectId我们已经见过。假设一个能持久化对象和字段名被修改,

makeDirty 方法会告诉JDO字段值已经改变,将新值写到数据存储中去。通常JDO自动跟踪字段的修改,你使

用这个方法的唯一机会是你想赋新值给数组索引时。
  getObjectId 方法返回JDO标志对象,这个方法要求以持久类实例作为参数。如果该实例的类不是持久的

,那么这个方法返回null
  顾名思义,getPersistenceManager以能持久类作为参数,得到管理这个持久类的PersistenceManager

。如果参数实例是非持久的,返回null


6.2 生存期操作

  JDO能识别能持久类的几种生存期状态。在JDO规范规定实例的状态转换遵守严格的规则。状态转换可以被

显式的行为触发,例如调用PersistenceManager的deletePersistent 方法删除某个持久对象,也能被隐

式行为触发,例如读取某个持久字段。
  下面列出能持久类实例的生存期状态。除非特别声明,每种状态都能被所有JDO实现品支持。别在意你能不

能记住状态和转换行为,实践中你很少会考虑到他们。

 1)Transient:通过自定义构造函数创建而没有和持久框架关联的对象称为暂时性对象。如果没有JDO,那

么对象就是暂时性对象。
 2)Persistent-new:对象调用PersistenceManager.makePersistent方法使自身持久而又没有插入到

数据存储中的状态称为“新持久”状态。当对象转换为这个状态的时候,会得到一个JDO标识。
    在事务提交时,新持久状态对象的信息会插入到数据存储。事务回滚时,一个新持久实例回复暂时性状态

。数据存储不起作用。如果事务的RestoreValues属性赋值为true,实例的持久事务化字段会回复事务刚开

始时的值。
 3)Persistent-new-deleted:在当前事务,对象刚由PersistenceManager.makePersistent创建或由

PersistenceManager.deletePersistent删除会进入这个状态。此时你只能访问对象的主键字段。如果试

图访问其他持久字段,会返回JDOUserException

  在事务提交时,处于persistent-new-deleted 状态的对象会转为暂时状态。其持久性字段的值会被JAVA

的默认值替代。事务回滚是,处于persistent-new-deleted 状态的对象也会转为暂时状态,在这种情况下

,如果事务的RestoreValues 属性设为true,它持久事务性的字段值会回复到事务刚开始时那样。否则不改

变。

  4)Persistent-clean:在当前事务中持久性字段未作出改变的对象所表现的状态称为

Persistent-clean

  5)Persistent-dirty:当前事务中持久性字段值改变的对象状态称为Persistent-dirty。在事务提交

后,数据存储会更新反映对象的持久性状态。

  6)Persistent-deleted:如果某个持久化对象是PersistenceManager.deletePersistent对象的参

数,它就变为PersistenceManager.deletePersistent的状态。对象处于这个状态时,你只能访问它的主

键字段,访问其他字段会导致JDOUserException。
  事务提交时处于persistent-deleted状态的对象会转为暂时的。对象的存储记录已被清除。

  7)Hollow:未从数据存储读取值的持久对象处于Hollow状态,只要实例进入Hollow状态,它持久性字段

的值会被代之以JAVA默认值。当你第一次访问这些字段的时候,这些字段会从数据存储重新装载,如果有必要

,可以延迟读取信息的时间,这称为懒惰装载。
  JDO实现品对处于Hollow状态实例的跟踪是不牢固的,如果你的应用程序没有保留对它们的引用,那么它们

会被垃圾回收。

  8)Persistent-nontransactional:处于Persistent-nontransactional状态的对象表现为持久数据

在数据存储里,但不保证是最新的值。一个允许访问数据旧值的状态好像是没用的,但如果使用得当,你会发

现当你引入程序的过时数据时,处于此状态的对象能提供更好的性能。
  这个状态是JDO的可选特性,有可能不被许多JDO实现品支持。这也是目前为止最复杂的生存期,它由事务

的NontransactionalRead, NontransactionalWrite, RetainValues, 和Optimistic properties等

管理。当下节介绍PersistenceManagerFactory 属性的时候,我们会讨论这些属性。
  在事务之外,读写处于Persistent-nontransactional状态的持久字段不会导致状态改变。当开始数据事

务时,你对这个实例的持久字段所作的任何修改都会被忽略。而当你在事务之内读

Persistent-nontransactional状态对象的持久字段则会转换为persistent-clean状态,而写则会转化为

persistent-dirty状态。在最优事务内,读不会转化状态,写则会转化为persistent-dirty状态。

  9)Transient-clean:Transient-clean和transient-dirty两种状态可以归为

transient-transactional类别,处于Transient-transactional状态的对象并不持久化,不过它们的字段

可以作为事务的边界.意味着当事务回滚的时候它们可以回复之前的值.通过把暂时性实例作为参数,调用

PersistenceManager的makeTransactional 方法, 你可以使它变成Transient-transactional.一些

JDO厂商不支持transient-transactional 状态,它是JDO规范的可选特性.

  10)Transient-dirty:处于Transient-transactional 状态的实例在当前事务被修改则进入

transient-dirty
状态,在事务完成之后,处于此状态的对象会变成transient-clean.如果事务回滚和它的RestoreValues属

性设为true,那么持久化和事务字段会回复事务开始之前的值.

  下图描述了持久化对象的状态转化.箭头表示从一种状态转换为另一种状态.箭头下的文字显示了触发状态转

换的事件.用紫色表示的方法名是事务接口里的方法,用红色表示的方法名是PersistenceManager 接口的方

法.等会我们会介绍这些接口.

  在复习完JDO生存期状态之后,JDOHelper的生存期操作--isDirty, isTransactional,

isPersistent, isNew, isDeleted --的目的就完全清楚了.每个都告诉你能持久实例是否有如名字显示的

那种属性,这些属性由实例的生存期状态决定.事实上,根据下面的表格,你可以根据这些属性计算出实例的状态

.然而再次声明,实践中很少需要担心你能持久化类的生存期状态.


  6.3. PersistenceManagerFactory 构造函数

  你可以厂商无关的风格调用JDOHelper的getPersistenceManagerFactory 方法来获得

PersistenceManagerFactory PersistenceManagerFactory 对象,这个方法需要一个参数:一个

java.util.Properties类的实例.这个实例的作用是设定PersistenceManagerFactory ,每次调用这个方

法,厂商都可以构造一个新的PersistenceManagerFactory 对象,或者返回连接池中匹配所提供属性的

PersistenceManagerFactory 对象.可供使用的配置选项和相关属性名称会在下章讨论.

ujn-oj-helper:济大OJ助手 ujn-oj-helper 济大 OJ 助手 用来偷跑题目 写在前面 由于本人已经大二下学期,可能再也不会用到 OJ 了,因此将之前的偷跑器开源,留给有需要的人。 使用方法 安装依赖项 npm i 爬取当前题库到数据库 node index get 1000 2000 搜索存在于 Contest 3556 中的题目 node index search 1000 2000 "Contest 3556" LICENSE Copyright 2019-2021 Sparta_EN<nya> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Softwa 立即下载

相关推荐

机器人视觉实战:用OpenCV搞定手眼标定(附完整C++代码)

本文详细介绍了使用OpenCV实现机器人视觉中的手眼标定技术,包括核心算法、工业场景优化及完整C++代码示例。通过解析坐标系转换问题,提供从数据采集到标定验证的全流程解决方案,帮助开发者在复杂工业环境中实现高精度机械臂与视觉系统的协同作业。

weixin_29306571的博客 481

OJhelper一款帮助你获取各大oj信息的软件

目前应用支持:查询、自定义、收藏各大oj比赛信息,跳转比赛界面。查询各大oj的Rating分以及题量,查看题量饼状图。

2301_79199219的博客 1809

AI 赋能测试全生命周期:多 Agent 协同的自动化提效方案

本文提出了一种基于Coze平台的多Agent协同测试解决方案,旨在解决软件测试中PRD解析不清晰、测试点覆盖不全、用例编写效率低、代码生成耗时等痛点。通过PRD优化、测试点生成、测试用例生成和单元测试框架生成四个Agent的协同工作,结合Cursor工具实现从需求到代码的全链路自动化。以电商平台登录模块为例,展示了从模糊PRD到标准化测试用例和可执行Java单元测试代码的完整转化流程。该方案通过AI赋能显著提升测试效率,减少人工干预,实现测试覆盖率≥95%,为快速迭代的软件研发提供了高效的测试自动化支持。

QINJIEEE的博客 1102

JDO makePersistent 的一些补充

public void makePersistent(java.lang.Object pc)Parameters: pc - a transient instance of a Class that implements PersistenceCapable这是JDO-javadoc里的对makePersistent的一段定义,PC,是一个瞬时化实例对象.其实,一个Persistent

JJYAO的J2EE之路 1383

关于MOS管栅极和栅介质(氧化物)的材料选择

大概解释了高K材料作为栅介质的好处,以及为什么会带来好处,同时引出了金属栅的优点,总结了使用高K材料和金属栅的原因。

qq_52054477的博客 1万+

聚类模型-层次聚类

聚类模型 1、层次聚类 2、原型聚类-K-means 3、模型聚类-GMM 4、EM算法-LDA主题模型 5、密度聚类-DBSCAN 6、图聚类-谱聚类 一、层次聚类 一、聚类理论 ​ 一般来说,聚类是在训练样本的标签信息不知的情况下,学习样本内在的性质和规律,将有限的集合划分成ccc类。根据“方以类聚,物以群分”的思想,类内对象尽可能的相似,...

myazi 6504

kodojdo指南第八章

第八章 PersistenceManager  上图概括了PersistenceManager 接口最常用的方法和属性。参考Javadoc了解更完整的信息。类JAVA BEAN风格的getter和setter方法在字段声明时给出。入参为....的方法表示重载函数。  PersistenceManager 是应用程序和JDO运行时结合的主要接口。每个PersistenceManager 管理

WalkingWithJava 1420

CloudCompare 多窗口联动显示点云

CloudCompare支持多窗口联动显示多个点云数据,可以用来比对原始点云数据与语义分割后的结果。 一、创建多个视窗 打开CloudCompare后会默认有一个视图,我们要同时打开两个数据就需要再创建一个视图,选择菜单栏里的3D Views,在下拉菜单中点击new,这样就创建了一个新的视图,这时3D Views的下拉菜单中有3D View 1和3D View 2两个视图,然后点击3D Views下拉菜单中的Title,这时在数据展示区就会出现两个并列的窗口。 二、分别加载点云数据 将数据分别拖进两个

zhaoguanhua的博客 2740

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 289

vmvare kali如何配置桥接模式进行上网

注意点:虚拟机可以PING通物理机,但是PING不通其他的网站。经过收集资料,得知由于是校园网连接,所以DHCP只能分配一个授权的IP地址给连接的主机,由于KALI是桥接物理机,物理机已经获得了这个授权的IP,所以导致桥接的虚拟机无法上网。所以不是因为配置的有问题,而是网络的安全设置导致了桥接失败。如果你是使用校园网,可以换个网络试试,使用校园网的时候,可能会遇到桥接失败。

猿小白的博客 1409

【控制模块路径跟踪算法】PID控制算法实现路径跟踪(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对PID控制算法实现路径跟踪–飞思卡尔的方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容PID属于无模型控制,调节三个环节的参数会产生什么影响根据控制对象的不同也会有很大差别PID形象解释小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。

qq_35635374的博客 2386

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 346

数学史学习资料:史前数学

著名物理学家伽莫夫(宇宙大爆炸理论以及核聚变理论的提出者)在他的科普书《从1到无穷大》中举了这样一个例子。两个原始部落的酋长比赛,看谁说的数字大。第一个酋长说了三,第二个酋长想了半天,然后说你赢了。你今天听起来觉得这两个人真可笑,至少说出四,岂不就赢了?但是对这两位酋长来讲,所拥有的东西就很少超过三个,比三个多的东西他们就觉得没有必要数清楚了,就用许多来形容了。也就是说,他们生活的环境限制了他们的认知。

howard2005的专栏 902

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

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

BADAO_LIUMANG_QIZHI的博客 198

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

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

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 499

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 635

java框架大全

java框架大全

qq_39326137的博客 183

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 361

SecureRandom做随机源,这个Java随机字符串工具类有3个方法

本文分享一款JDK17环境下的Java随机字符串工具类,内置3个开箱即用的方法,全部采用SecureRandom加密安全随机源,不存在弱随机、可预测、取模偏差等问题。工具类支持默认62字符集随机串、纯数字随机串、自定义字符集随机串三种生成模式,支持Unicode码点级别的字符集处理,兼容Emoji等增补字符,边界处理严格,异常信息明确,适合验证码、邀请码、盐值、随机口令、短链码等场景,源码可直接复制使用。

Java后端 | AI智能体应用实战派 | 电脑技能行家 299

IDEA 简介:从零认识 IntelliJ IDEA

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

ztI10的博客 151

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 329

TRingBuffer两端都能增删(快递站版)

TRingBuffer 是一个支持两端增删、下标访问且容量动态增长的环形双端队列。它通过无符号索引的永不归零设计,利用减法自动模运算实现空满判断与元素计数,避免了传统环形缓冲浪费格子的问题。内部以票号(索引)标记首尾,扩容时重排元素为连续存储,保证 O(1) 操作与高缓存效率。虽不线程安全,但其高效性使其成为游戏开发中事件队列、命令缓冲等场景的理想选择。

u013768914的博客 227

ubuntu安装hadoop系统

本文详细介绍了基于VMware克隆虚拟机搭建三节点Hadoop分布式集群的全过程:使用同一Ubuntu镜像克隆出master、worker1、worker2三台虚拟机,依次配置主机名、固定IP(如192.168.82.10/11/12)、SSH服务及免密登录,确保节点间网络互通。随后安装Java,下载配置Hadoop并分发至各节点,最终初始化启动集群,验证其存储与计算功能,实现高效的大数据环境部署。

qq_43592674的博客 334

Mac上装了最新版本的Android Studio,但是没找到jdk的设置选项也没找到jbr的目录

新版Android Studio(2025.3.1+)因三项变更导致常见问题:一、JDK设置移至“DaemonJVM criteria”,新项目默认自动探测或下载JDK;二、JBR目录改名为带版本号的jbr-21等,需进入.app/Contents/查看,或通过About窗口确认运行时;三、命令行缺adb因platform-tools未加入PATH,需在SDK Manager中勾选并配置~/.zshrc中的ANDROID_HOME及PATH。重装或清理残留可解决缺失问题,切勿手动设JAVA_HOME或安装冲

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值