# 03 研究与实验卡 - 规范版本:Jakarta Persistence 3.2 官方 HTML,https://jakarta.ee/specifications/persistence/3.2/jakarta-persistence-spec-3.2 。已核对 §2.4(键唯一性与修改后未定义行为)、§2.4.1(复合键相等性与 record)、§2.6(基本类型)、§2.7(嵌入对象无独立身份、共享语义未定义)、§3.9(基本属性转换)、§11.1.4 / §11.1.9(列覆盖与列声明)、§11.1.54(Temporal);对应锚点见正文。 - 已运行基线(非本章扩展实验):`examples/jpa/src/test/java/blog/jpa/ProcurementJpaTest.java` 的 `lifecycleAndServerCalculatedTotal` 输入 `2.25 × 3`,提交后同一 manager 清上下文重读,总额 6.75、一条明细,测试通过。整批六例在 PostgreSQL 16.15/RESOURCE_LOCAL 退出码 0;原始记录、环境和逐文件 SHA-256:`writing-plans/jpa/verification/20261004T053805Z-pg16-resource-local/{RUN.md,code-sha256.txt,test.stdout.txt,exit-code.txt}`。迁移 stdout 未归档,不标独立迁移 PASS。 - 现有工程入口(未修改):`examples/jpa/src/main/java/blog/jpa/ProcurementRequest.java`、`ProcurementLine.java`,`src/main/resources/META-INF/persistence.xml` 与 `db/migrations/01-init.sql`(`numeric(18,2)`、`request_id` 外键)。候选 `MoneyAmount` 与 `Chapter03MappingTest`、增加币种和时间列的迁移均未落地;现有 `validate` 不会创建列。 - 正常输入:19.90 × 3 + 0.10 × 1;预期申请总额 59.80、两行对应同一申请、提交后新上下文可读回。时间类型、列精度和会话时区必须作为后续测试显式配置。状态:NOT_RUN;没有声称 SQL 数量、ID 分配时刻或持久化结果。 - 失败输入:19.905、负数、过大金额、空列、重复 `(tenant_id, request_no)`、其他租户查询。预期分别按 Java 入口、数据库约束、业务授权边界拒绝;需要断言回滚后行数/金额,异常类及 SQLSTATE 尚未知。状态:NOT_RUN;不得从 `@Column` 推测实际旧表结构。 - 后续扩展实验的证据要求:冻结扩展代码 SHA、PostgreSQL/pgJDBC/Hibernate/JDK 版本、迁移版本、隐去密码的命令、退出码、完整输出和新连接复查 SQL。原有六例通过记录不等于嵌入对象、时间、精度失败路径已验收。