第1章 简介 1
1.1 对象-关系映射 1
1.2 Java持久化支持 7
1.2.1 专用解决方案 7
1.2.2 JDBC 7
1.2.3 企业JavaBean 8
1.2.4 Java数据对象 8
1.3 为什么需要另一种标准 9
1.4 Java持久化API 10
1.4.1 规范的历史 10
1.4.2 概述 11
1.5 本章小结 13
第2章 入门 14
2.1 实体概述 14
2.1.1 持久性 14
2.1.2 标识 15
2.1.3 事务性 15
2.1.4 粒度 15
2.2 实体元数据 16
2.2.1 注解 16
2.2.2 XML 16
2.2.3 异常配置 16
2.3 创建实体 17
2.4 实体管理器 19
2.4.1 获取实体管理器 20
2.4.2 持久化实体 20
2.4.3 寻找实体 21
2.4.4 删除实体 22
2.4.5 更新实体 22
2.4.6 事务 23
2.4.7 查询 24
2.5 汇总 25
2.6 组装 27
2.6.1 持久化单元 27
2.6.2 持久化存档文件 28
2.7 本章小结 28
第3章 企业应用程序 30
3.1 应用程序组件模型 30
3.2 会话bean 31
3.2.1 无状态会话bean 32
3.2.2 有状态会话bean 35
3.2.3 单例会话bean 38
3.3 消息驱动bean 41
3.4 servlet 42
3.5 依赖性管理 43
3.5.1 依赖性查找 43
3.5.2 依赖性注入 45
3.5.3 声明依赖性 47
3.6 事务管理 49
3.6.1 事务概述 50
3.6.2 Java中的企业事务 50
3.7 使用Java EE组件 55
3.7.1 使用无状态会话9ean 55
3.7.2 使用有状态会话bean 56
3.7.3 使用单例会话bean 57
3.7.4 使用消息驱动bean 57
3.7.5 添加实体管理器 58
3.8 汇总 59
3.8.1 定义组件 59
3.8.2 定义用户接口 61
3.8.3 组装 61
3.9 本章小结 62
第4章 对象-关系映射 64
4.1 持久化注解 64
4.2 访问实体状态 65
4.2.1 字段访问 65
4.2.2 属性访问 66
4.2.3 混合访问 66
4.3 映射到表 68
4.4 映射简单类型 69
4.4.1 列映射 70
4.4.2 延迟提取 71
4.4.3 大型对象 72
4.4.4 枚举类型 73
4.4.5 时间类型 74
4.4.6 瞬态 75
4.5 映射主键 76
4.5.1 重写主键列 76
4.5.2 主键类型 76
4.5.3 标识符生成 76
4.6 关系 81
4.6.1 关系概念 81
4.6.2 映射概述 84
4.6.3 单值关联 84
4.6.4 集合值关联 88
4.6.5 延迟关系 94
4.7 嵌入对象 94
4.8 本章小结 98
第5章 集合映射 99
5.1 关系和元素集合 99
5.2 使用不同的集合类型 102
5.2.1 Set或者Collection 102
5.2.2 List 103
5.2.3 Map 106
5.2.4 重复 117
5.2.5 Null值 118
5.3 最佳实践 119
5.4 本章小结 120
第6章 实体管理器 121
6.1 持久化上下文 121
6.2 实体管理器 122
6.2.1 容器托管的实体管理器 122
6.2.2 应用程序托管的实体管理器 126
6.3 事务管理 128
6.3.1 JTA事务管理 129
6.3.2 资源本地的事务 137
6.3.3 事务回滚和实体状态 139
6.4 选择实体管理器 140
6.5 实体管理器操作 140
6.5.1 持久化实体 140
6.5.2 寻找实体 142
6.5.3 删除实体 142
6.5.4 级联操作 143
6.5.5 清除持久化上下文 146
6.6 与数据库同步 147
6.7 分离和合并 149
6.7.1 分离 149
6.7.2 合并分离的实体 151
6.7.3 与分离实体一起工作 154
6.8 本章小结 166
第7章 使用查询 167
7.1 Java持久化查询语言 167
7.1.1 入门 168
7.1.2 筛选结果 169
7.1.3 投影结果 169
7.1.4 实体之间的联接 169
7.1.5 聚合查询 170
7.1.6 查询参数 170
7.2 定义查询 171
7.2.1 动态查询定义 171
7.2.2 命名查询定义 173
7.3 参数类型 175
7.4 执行查询 177
7.4.1 使用查询结果 178
7.4.2 查询分页 182
7.4.3 查询与未提交的更改 184
7.4.4 查询超时 186
7.5 批量更新和删除 187
7.5.1 使用批量更新和删除 187
7.5.2 批量删除和关系 189
7.6 查询提示 190
7.7 查询的最佳实践 191
7.7.1 命名查询 191
7.7.2 报告查询 192
7.7.3 供应商提示 192
7.7.4 无状态会话bean 192
7.7.5 批量更新和删除 193
7.7.6 提供程序的区别 193
7.8 本章小结 193
第8章 查询语言 195
8.1 简介 195
8.1.1 术语 195
8.1.2 示例数据模型 196
8.1.3 示例应用程序 197
8.2 选择查询 199
8.2.1 SELECT子句 200
8.2.2 FROM子句 203
8.2.3 WHERE子句 210
8.2.4 标量表达式 215
8.2.5 ORDER BY子句 219
8.3 聚合查询 220
8.3.1 聚合函数 222
8.3.2 GROUP BY子句 222
8.3.3 HAVING子句 223
8.4 更新查询 223
8.5 删除查询 224
8.6 本章小结 225
第9章 条件API 226
9.1 概述 226
9.1.1 条件API 226
9.1.2 参数化类型 227
9.1.3 动态查询 228
9.2 构建条件API查询 231
9.2.1 创建查询定义 231
9.2.2 基本结构 232
9.2.3 条件对象和可变性 233
9.2.4 查询根和路径表达式 233
9.2.5 SELECT子句 235
9.2.6 FROM子句 238
9.2.7 WHERE子句 240
9.2.8 构建表达式 240
9.2.9 ORDER BY子句 251
9.2.10 GROUP BY和HAVING子句 251
9.3 强类型查询定义 251
9.3.1 元模型API 252
9.3.2 强类型的API概述 253
9.3.3 规范化元模型 254
9.3.4 选择正确的查询类型 256
9.4 本章小结 257
第10章 高级对象-关系映射 258
10.1 表和列名 258
10.2 复杂的嵌入对象 259
10.2.1 高级嵌入映射 260
10.2.2 重写嵌入关系 261
10.3 复合主键 262
10.3.1 id类 263
10.3.2 嵌入id类 264
10.4 派生标识符 266
10.4.1 派生标识符的基本规则 267
10.4.2 共享主键 267
10.4.3 多个映射特性 269
10.4.4 使用EmbeddedId 270
10.5 高级映射元素 272
10.5.1 只读映射 272
10.5.2 可选性 273
10.6 高级关系 274
10.6.1 使用联接表 274
10.6.2 避免联接表 275
10.6.3 复合联接列 276
10.6.4 孤儿删除 278
10.6.5 映射关系状态 279
10.7 多个表 281
10.8 继承 284
10.8.1 类层次结构 284
10.8.2 继承模型 288
10.8.3 混合继承 294
10.9 本章小结 296
第11章 高级主题 298
11.1 SQL查询 298
11.1.1 本地查询与JDBC 299
11.1.2 定义和执行SQL查询 301
11.1.3 SQL结果集映射 303
11.1.4 参数绑定 309
11.2 生命周期回调 309
11.2.1 生命周期事件 309
11.2.2 回调方法 310
11.2.3 实体侦听器 312
11.2.4 继承和生命周期事件 314
11.3 验证 319
11.3.1 使用约束 319
11.3.2 调用验证 321
11.3.3 验证组 321
11.3.4 创建新的约束 323
11.3.5 JPA中的验证 325
11.3.6 启用验证 326
11.3.7 设置生命周期的验证组 326
11.4 并发性 327
11.4.1 实体操作 327
11.4.2 实体访问 328
11.5 刷新实体状态 328
11.6 锁定 331
11.6.1 乐观锁定 331
11.6.2 悲观锁定 341
11.7 缓存 344
11.7.1 通过层排序 344
11.7.2 共享缓存 346
11.8 Utility类 350
11.8.1 PersistenceUtil 351
11.8.2 PersistenceUnitUtil 351
11.9 本章小结 352
第12章 XML映射文件 353
12.1 元数据困惑 354
12.2 映射文件 354
12.2.1 禁用注解 355
12.2.2 持久化单元默认值 357
12.2.3 映射文件默认值 360
12.2.4 查询和生成器 362
12.2.5 托管类和映射 366
12.3 本章小结 387
第13章 包装和部署 388
13.1 配置持久化单元 388
13.1.1 持久化单元的名称 389
13.1.2 事务类型 389
13.1.3 持久化提供程序 389
13.1.4 数据源 390
13.1.5 映射文件 391
13.1.6 托管类 392
13.1.7 共享缓存模式 394
13.1.8 验证架构 395
13.1.9 添加供应商属性 395
13.2 构建和部署 396
13.2.1 部署类路径 396
13.2.2 包装选项 397
13.2.3 持久化单元的范围 401
13.3 服务器外部 402
13.3.1 配置持久化单元 402
13.3.2 在运行时指定属性 404
13.3.3 系统类路径 404
13.4 架构生成 405
13.4.1 唯一约束 405
13.4.2 null约束 406
13.4.3 基于字符串的列 406
13.4.4 浮点列 407
13.4.5 定义列 407
13.5 本章小结 408
第14章 测试 410
14.1 测试企业应用程序 410
14.1.1 术语 411
14.1.2 在服务器外部测试 412
14.1.3 测试架构 413
14.2 单元测试 413
14.2.1 测试实体 414
14.2.2 测试组件中的实体 415
14.2.3 单元测试中的实体管理器 417
14.3 集成测试 420
14.3.1 使用实体管理器 420
14.3.2 组件和持久化 426
14.4 最佳实践 436
14.5 本章小结 436
第15章 迁移 438
15.1 从CMP实体bean迁移 438
15.1.1 划定挑战的范围 439
15.1.2 实体bean转换 440
15.2 从JDBC迁移 448
15.3 从其他的ORM解决方案迁移 449
15.4 利用设计模式 449
15.4.1 传输对象 450
15.4.2 会话外观 453
15.4.3 数据访问对象 455
15.4.4 业务对象 459
15.4.5 快车道读者 459
15.4.6 活动记录 460
15.5 本章小结 460