第1章 引言 1
1.1 Java对持久化的支持 1
1.1.1 JDBC 2
1.1.2 EJB 2
1.1.3 Java数据对象 3
1.2 为什么采用另一个标准 3
1.3 对象关系映射 4
1.4 Java Persistence API 9
1.4.1 规范的历史 10
1.4.2 概述 11
1.5 小结 12
第2章 入门 13
2.1 实体概述 13
2.1.1 可持久性 13
2.1.2 标识性 14
2.1.3 事务性 14
2.1.4 粒度 14
2.2 实体元数据 14
2.2.1 注解 15
2.2.2 XML 15
2.2.3 按异常配置 16
2.3 创建一个实体 16
2.4 实体管理器 18
2.4.1 获得实体管理器 19
2.4.2 持久化实体 20
2.4.3 发现实体 21
2.4.4 删除实体 22
2.4.5 更新实体 23
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 34
3.3 消息驱动Bean 37
3.4 Servlet 38
3.5 依赖管理 40
3.5.1 依赖查找 40
3.5.2 依赖注入 42
3.5.3 声明依赖 43
3.6 事务管理 46
3.6.1 事务回顾 46
3.6.2 Java企业事务处理 47
3.7 使用Java EE组件 51
3.7.1 使用无状态会话Bean 51
3.7.2 使用有状态会话Bean 52
3.7.3 使用消息驱动Bean 53
3.7.4 增加实体管理器 54
3.8 综述 56
3.8.1 定义组件 56
3.8.2 定义用户接口 57
3.8.3 打包 58
3.9 小结 58
第4章 对象关系映射 60
4.1 持久化注解 60
4.2 访问实体状态 61
4.2.1 数据成员访问 61
4.2.2 成员属性访问 62
4.3 映射到表 62
4.4 映射简单类型 63
4.4.1 字段映射 64
4.4.2 延迟获取 65
4.4.3 大对象 66
4.4.4 枚举类型 67
4.4.5 时间类型 68
4.4.6 瞬时状态 69
4.5 映射主键 70
4.6 关系 74
4.6.1 关系的概念 74
4.6.2 映射概述 77
4.6.3 单值关联 77
4.6.4 集合值关联 83
4.6.5 延迟关系 90
4.7 小结 91
第5章 实体管理器 92
5.1 持久化上下文 92
5.2 实体管理器 92
5.2.1 容器管理的实体管理器 93
5.2.2 应用程序管理的实体管理器 97
5.3 事务管理 99
5.3.1 JTA事务管理 100
5.3.2 本地资源事务 108
5.3.3 事务回滚和实体状态 110
5.4 选择实体管理器 111
5.5 实体管理器操作 112
5.5.1 持久化一个实体 112
5.5.2 发现一个实体 113
5.5.3 删除一个实体 114
5.5.4 级联操作 115
5.5.5 清理持久化上下文 117
5.6 与数据库同步 118
5.7 脱管与合并 120
5.7.1 脱管 120
5.7.2 合并脱管实体 122
5.7.3 处理脱管实体 125
5.8 小结 137
第6章 使用查询 139
6.1 Java持久化QL 139
6.1.1 入门 140
6.1.2 过滤结果 140
6.1.3 投射结果 141
6.1.4 实体间连接 141
6.1.5 聚合查询 142
6.1.6 查询参数 142
6.2 定义查询 142
6.2.1 动态查询定义 143
6.2.2 命名查询定义 145
6.3 参数类型 146
6.4 执行查询 148
6.4.1 处理查询结果 149
6.4.2 查询分页 152
6.4.3 查询和未提交的改变 154
6.5 批量更新和删除 156
6.5.1 使用批量更新和删除 157
6.5.2 批量删除和关系 159
6.6 查询提示 160
6.7 查询最佳实践 160
6.7.1 命名查询 161
6.7.2 报表查询 161
6.7.3 查询提示 161
6.7.4 无状态会话Bean 162
6.7.5 批量更新和删除 162
6.7.6 提供者的区别 162
6.8 小结 162
第7章 查询语言 164
7.1 介绍 164
7.1.1 术语 164
7.1.2 样例数据模型 165
7.1.3 样例应用 166
7.2 选择查询 168
7.2.1 SELECT子句 169
7.2.2 FROM子句 171
7.2.3 WHERE子句 176
7.2.4 ORDER BY子句 183
7.3 聚合查询 183
7.3.1 聚合函数 184
7.3.2 GROUP BY子句 185
7.3.3 HAVING子句 186
7.4 更新查询 186
7.5 删除查询 187
7.6 小结 187
第8章 高级对象关系映射 188
8.1 嵌入式对象 188
8.2 复合主键 191
8.2.1 Id类 192
8.2.2 嵌入式Id类 193
8.3 高级映射元素 195
8.3.1 只读映射 195
8.3.2 可选性 196
8.4 高级关系 196
8.4.1 复合连接字段 197
8.4.2 包括一个关系的标识符 198
8.4.3 映射关系状态 200
8.5 多个表 202
8.6 继承 205
8.6.1 类层级结构 205
8.6.2 继承模型 209
8.6.3 混合继承 216
8.7 小结 218
第9章 高级主题 219
9.1 SQL查询 219
9.1.1 本地查询与JDBC 220
9.1.2 定义和执行SQL查询 221
9.1.3 SQL结果集映射 224
9.1.4 参数绑定 229
9.2 生命周期回调 229
9.2.1 生命周期事件 229
9.2.2 回调方法 230
9.2.3 实体监听器 232
9.2.4 继承和生命周期事件 234
9.3 并发性 239
9.3.1 实体操作 239
9.3.2 实体访问 239
9.4 刷新实体状态 239
9.5 锁定 242
9.5.1 乐观锁定 242
9.5.2 版本 243
9.5.3 额外的锁定策略 244
9.5.4 从乐观失败中恢复 249
9.6 模式生成 251
9.6.1 唯一性约束 252
9.6.2 空值约束 253
9.6.3 基于字符串的字段 253
9.6.4 浮点字段 254
9.6.5 定义字段 254
9.7 小结 255
第10章 XML映射文件 256
10.1 元数据之谜 256
10.2 映射文件 257
10.2.1 禁用注解 258
10.2.2 持久化单元默认值 259
10.2.3 映射文件默认值 262
10.2.4 查询和生成器 264
10.2.5 托管类和映射 268
10.3 小结 286
第11章 打包和部署 287
11.1 配置持久化单元 287
11.1.1 持久化单元名 287
11.1.2 事务类型 288
11.1.3 持久化提供者 288
11.1.4 数据源 289
11.1.5 映射文件 290
11.1.6 托管类 291
11.1.7 增加供应商属性 293
11.2 编译和部署 293
11.2.1 部署classpath 293
11.2.2 打包选项 294
11.2.3 持久化单元范围 298
11.3 在服务器之外 299
11.3.1 配置持久化单元 299
11.3.2 在运行时指定属性 301
11.3.3 系统classpath 301
11.4 小结 301
第12章 测试 303
12.1 测试企业应用 303
12.1.1 术语 304
12.1.2 在服务器之外测试 304
12.1.3 测试框架 306
12.2 单元测试 306
12.2.1 测试实体 306
12.2.2 测试组件中的实体 308
12.2.3 单元测试中的实体管理器 309
12.3 集成测试 313
12.3.1 使用实体管理器 313
12.3.2 组件和持久化 318
12.4 最佳实践 329
12.5 小结 330
第13章 移植 331
13.1 从CMP实体Bean移植 331
13.1.1 定位挑战 331
13.1.2 实体Bean转换 332
13.2 从JDBC移植 341
13.3 从其他ORM解决方案移植 342
13.4 利用设计模式 342
13.4.1 传输对象 342
13.4.2 会话外观 345
13.4.3 数据访问对象 347
13.4.4 业务对象 351
13.4.5 快速道读取器 352
13.4.6 活动记录 352
13.5 小结 353
附录 快速参考 354