该用户从未签到
|
基于理论,注重实践。避免了大量的理论罗列,先使读者有了一定的感性认识,再继续深入,上升到理性,符合学习知识的客观过程。
% e8 }+ v) S2 Q' w2 b* k! j 内容翔实,实例丰富。不仅对JPA的理论进行了详细的讲解,而且辅以大量实例,使读者可以边学技术,边进行实践。( L0 o z) ]/ f. K, v( r! {; b* \
注重实际,应用为王。精心挑选的大量示例程序都是作者在实际开发中的经验总结,涵盖了实际开发中可能遇到的各种问题。+ j/ G6 c, ^5 ^ y! D' V
取材广泛,内容充实。覆盖JPA技术的各个方面,从最基本的简单概念到JPA高级应用的相关技术,再到JPA结合各种框架的使用,是对JPA内容体系的整体总结。
" u2 l2 y: m4 w9 R* d, U& u F 注重基础,高于基础。不仅对基础知识进行详解,还大量讲述了其基本实现原理。使读者不仅知道如何应用,而且能理解最本质的内容,从而便于以后更深入地学习。& ?7 ?" g; t! p2 z+ v- y
本书全面介绍了JPA(java Persistence API)的相关知识。全书共分4篇,第1篇介绍了JPA产生的背景及JPA的运行环境、流行的开发工具IDE等;第2篇介绍了 JPA基本知识,包括映射实体、映射实体关系、实体管理器及JPQL的相关知识;第3篇进一步介绍了关于JPA的高级应用,包括持久化上下文、XML映射文件、打包和部署、JPA实现框架和与spring集成等;第4篇介绍了三个完整案例,分别是学生成绩管理系统(Servlet+JPA)、宠物商店(Swing+JPA)、博客系统(struts2+Spring2+JPA)。
" t9 ~" @ [# z! R, W! x# A 本书结构清晰,注重实战,深入浅出,非常适合JPA开发人员学习使用,同时也可用做高校相关专业师生和社会培训班的教材。# q I6 _+ ] p- z
5 A0 E( V& J b: V
) b q* j7 T9 i- j5 O8 }: \第一篇 初识JPA3 l# J2 Z3 U) D. B
第1章 JPA概述 U# t. N9 J# H* _8 {
1.1 什么是数据持久化 5 A# A# P& y% C4 D! p& d! d
1.2 Java持久化技术 1 r# W6 Q8 l$ i% R8 Q! p
1.2.1 序列化(Serialization) * N6 b. r! q5 _
1.2.2 JDBC 0 C/ p6 _! ~: ^( f7 n
1.2.3 关系对象映射(ORM) 5 ~4 l" x9 k9 z7 r* i
1.2.4 对象数据库(ODB)
3 L5 W; S) X6 p 1.2.5 Java数据对象(JDO)
5 r, C% \% U# \( R0 X 1.2.6 EJB 2.X
e! q N# p( D' h 1.3 JPA(Java Persistence API)概述
4 C$ p! d" D/ B 1.3.1 什么是JPA 4 l) f3 P9 z/ U* X, E" T* i3 s# _
1.3.2 JPA的历史
# Y( d# b" @- V7 W0 s6 t& | 1.3.3 下载JPA规范 3 P1 c/ H1 C. u3 {' {
1.3.4 JPA的优势
, `! u$ j3 C* @, S2 O 1.3.5 EJB 3与JPA的关系
* }% I$ ?5 U& A 1.3.6 常见的实现JPA的框架 ' b* g9 f) K: n5 w" F% D' `/ W
1.4 对象关系映射(ORM) 2 L, r$ j$ q& ^4 _5 M" c! d' i: N
1.4.1 什么是对象关系映射 7 G0 {/ x3 k) x" Z; t8 z
1.4.2 对象关系映射模式 2 |8 f+ k' `. c/ K1 a6 a
1.5 本章小结 9 {$ z1 J, x6 O4 @
第2章 搭建JPA开发和运行环境
% J0 m8 C1 p/ ~: W 2.1 JBoss概述
8 e) X- K! L2 Q3 o" i9 I! [5 m: E' ~ 2.1.1 JBoss Application Server
! A) @; u7 }% Q( k 2.1.2 JBoss IDE for Eclipse
1 o9 O# D+ I" |9 C9 x1 k7 N 2.2 JBoss应用服务器的搭建 i; m9 q9 n) q5 |. [! ?
2.2.1 下载和安装JBoss服务器 * V0 B# }" M- \# L7 f; t' s
2.2.2 启动JBoss服务器
3 L% o( C6 q! T9 s; x( a8 O 2.2.3 停止JBoss服务器 0 e' o) @- S5 R& _0 y& M& W
2.2.4 JBoss的文件目录结构 2 V) T1 W' V& t3 R4 E/ j* t
2.3 JBoss IDE开发环境的搭建
M% r. R1 w. p# i1 g. s2 x 2.3.1 下载JBoss IDE for Eclipse
4 l& @ Z1 g4 R: T! c! m8 J 2.3.2 Eclipse中配置JBoss ; ?* R! b! [& @9 S/ ~1 L/ @& Z
2.3.3 Eclipse中启动和停止JBoss
% e" i+ B7 }& J m- t! ~* ` 2.4 MySQL数据库的下载和安装
4 T) j1 \9 z, I; p2 a# K 2.4.1 MySQL数据库概述
8 a) E% F( H- w3 J+ d0 u& r 2.4.2 下载MySQL
' t1 X' }6 l+ d* N; O 2.4.3 安装MySQL
3 [7 M( E) Y. s$ X0 l 2.4.4 运行MySQL 9 R5 ^ {8 _$ E" n2 a
2.4.5 下载MySQL客户端 4 X( v! x2 u- }6 z
2.5 本章小结 ) s* K. Y0 N# d1 G
第3章 JPA之初体验
) h; I1 Y% z4 p& j+ s 3.1 第一个Entity实体类
3 T, R& k( j' p 3.1.1 第一个POJO类
* s, u1 N l" e: U$ Z) B 3.1.2 数据库中对应的表
: y0 D$ X% z" I) ^6 t$ m 3.1.3 使用注释(Annotations)配置ORM映射 * p; o7 d' W# C& |! ]; P
3.1.4 配置persistence.xml
$ q" Z4 y& o, z4 O) Q3 X: I8 M! k3 u 3.2 第一个SessionBean ) r' f) A+ O& U
3.2.1 定义Remote接口
$ { [" u0 U' {5 R4 } `4 R 3.2.2 SessionBean类 2 g& W# ]3 y0 D* n
3.3 使用EntityManager操作实体
6 d, ~7 o2 z, G6 f7 y2 Z 3.3.1 依赖注入EntityManager + x- F- Z& w4 W" o. l+ R, q& m0 ^
3.3.2 添加Entity 7 V4 p6 M& r/ B' i
3.3.3 根据主键查找Entity
3 y; p/ g8 t1 n) n! | 3.3.4 更新Entity : |2 r# \) _3 L$ o. r
3.3.5 删除Entity
, F8 {- }" j7 O; L* g1 _ 3.3.6 执行查询
% s, ? R9 a- U: F" Z& {% I 3.4 部署EJB
0 l4 Q6 d8 ^0 { a& d1 G% Q. s5 d! | 3.4.1 打EJB-JAR包 & p$ l/ _3 g+ o6 \; w$ T" g/ B
3.4.2 部署EJB
) D# i- @( O$ B 3.4.3 配置DataSource数据源
- x' M m! J* V# n/ X 3.4.4 启动JBoss服务器 1 I: u7 a/ I$ x7 V4 A/ @
3.4.5 查看JBoss控制台JMX-Console 5 Z7 V2 Y* R. {8 X
3.5 调用EJB的Client
2 V0 ^; W1 Q) k6 Y8 \, b 3.5.1 TestClient类) ]; Q- Y8 X) V3 {
3.5.2 运行Client & `, s6 j6 a; R( a9 v- _2 Y
3.6 本章小结 6 s L: l" |/ X! G& q1 n
第4章 JPA开发工具
7 n& K+ e" i3 f* f3 A k- f9 K ?, k 4.1 Eclipse Dali JPA 概述 ( t. [/ I* Q" k; h. y; v: e
4.1.1 什么是Dali JPA
" i2 O* c, q6 D6 P/ a/ D4 ` 4.1.2 下载Dali JPA
, `' n& ?8 G0 \7 S4 s! m 4.1.3 Dali JPA界面预览 ( [4 g; h0 d p% R, U* k6 G
4.2 连接数据库
5 u9 h0 o6 h9 b) @ t" p 4.3 开始JPA开发 " F3 @) J- T9 Q
4.3.1 创建JPA项目 H8 z6 A- d$ w" A+ m
4.3.2 创建持久化类
+ s/ U9 t! k- t N7 j D 4.4 本章小结 Z) p* [+ C$ | Q/ W3 w5 O5 Y% V' {
第二篇 JPA进阶
* B3 B8 p+ h5 t 第5章 映射持久化对象(Entity)
8 o! [* y( s5 b( {- n; J+ N% f3 I# a 5.1 实体映射基础
: `2 j2 v+ ^* U6 t0 Z9 b) u 5.1.1 简单的POJO类
( a( Q. v) {0 ~( ^3 Q 5.1.2 映射实体(@Entity) r8 ` _ _3 D, r0 ~
5.1.3 无参的构造方法
" k+ K, s7 N# @+ t 5.1.4 实现Serializable接口 t9 J9 i, r! f" d
5.1.5 可继承性
& D' u; [9 x, p4 E 5.1.6 标注主键(@Id) 3 g. s, t* s; b9 s# P0 R% C3 b) y
5.1.7 默认实体映射 7 D& u9 a/ G: C
5.2 映射表和字段 5 L- q; e+ N5 G) K
5.2.1 映射表(@Table)
/ B6 g9 Q4 d( _) w9 L 5.2.2 映射方法和属性(@Column)
" [( ]) N6 P- F1 L- l 5.2.3 可持久化的基本数据类型 ' K5 ~% A& h3 `) a" ~& a" n
5.2.4 映射优化一:基本数据类型VS封装类 ; H! ?1 N% q# `: r3 B1 U0 q' N* K
5.2.5 映射优化二:@Basic设置加载方式 " `! }+ H4 Z8 u+ m( @9 ]
5.3 主键映射 7 o8 s' Q+ P+ `( i
5.3.1 主键标识(@Id) : V& I+ S: _8 ]9 Z" Y) }( y
5.3.2 自增主键
4 ^3 W5 Q. y; j7 M% ]/ h& x+ w 5.3.3 表生成器(@ TableGenerator) D3 K" o; c. Z& N& j# d
5.3.4 Sequence生成器(@ Sequence) 2 @ e$ E" i' ^+ s
5.3.5 Identity生成器 - w* q' W- e/ Z5 \* x
5.3.6 复合主键(@IdClass)
5 S3 f5 G+ t# L% l& b8 M0 ? 5.3.7 嵌入式主键(@EmbeddedId)
6 H' \, G% U" @- m9 M( I 5.3.8 几种主键生成策略的比较 1 u7 G: b1 O2 c( a
5.4 映射特殊类型
* w, C( l' z. H 5.4.1 映射Blob和Clob类型(@Lob) 1 ^# x! i0 s/ i( Y3 ?
5.4.2 映射时间(Temporal)类型(@Temporal)
0 f7 _5 Q% a5 X- W 5.4.3 映射枚举(Enumerated)型
- E1 ~/ |& v! E. Q& q 5.5 映射非持久化类型(@Transient)
l, T1 r1 A w4 [ 5.6 本章小结
9 F, n! Q0 u& B' ~/ }% r8 W9 { 第6章 实体关系映射
9 m9 G& c3 l7 I: r& \. U8 E) F" U 6.1 实体关系概述 8 q- l7 W3 Q4 e' n4 _9 O3 I
6.1.1 实体关系的方向性
$ ?& J! X2 m t: {5 Z 6.1.2 实体关系的数量性 , P2 B$ p( T/ E3 w# N' v& l+ D
6.2 一对一(@OneToOne)
( i& T; j! j0 {/ o; S7 M; Y 6.2.1 单向关联(Unidirectional) % c* b$ h, o( @$ B5 j
6.2.2 一对一(@ OneToOne)
" H6 D6 y6 i5 G8 g9 g" V9 g# B 6.2.3 关联指定列(@JoinColumn)
0 ]" o9 s+ d, A, Q: @ 6.2.4 双向关联(Bidirectional) % D4 ]( A' u" B3 L: v: o2 B/ y
6.2.5 主键关联(@PrimaryKeyJoinColumn)
3 `- {& b9 b! I( _" n 6.2.6 默认关联 9 }4 j1 y! o: }. ~- O$ _: S
6.2.7 一对一映射的一般步骤 & R( [. m5 F/ z9 x' i$ J
6.3 一对多(@OneToMany)
" J( [" g4 A0 A+ r+ O9 N 6.3.1 一对多模型(单向) * V- e2 X6 W1 w6 n0 {3 V Q
6.3.2 映射策略 89
) R1 [* W& L. K; w( Z0 A# k5 d9 C 6.3.3 映射策略——外键关联 4 {0 G' [+ ^- I- r
6.3.4 一对多(@OneToMany)
3 [2 L" p/ t# a, S5 _" f 6.3.5 映射策略——表关联 7 v' m6 B9 C1 {
6.3.6 表关联(@ JoinTable)
5 P8 Y, R; v( c& G0 _5 l0 ~ 6.3.7 默认关联 ) q; }) M5 G/ {3 @0 }, B7 u( |5 ^* h
6.4 多对一(@ManyToOne) 2 I! b3 z$ }! L
6.4.1 多对一 模型(单向) + E1 D; D7 p" h- R7 [- | I1 c" G
6.4.2 映射策略——外键关联
+ Y) Y, Q' ^8 ~, b 6.4.3 多对一(@ManyToOne)
+ N& u( I' `: ?6 D1 p- } 6.4.4 默认关联
M5 |. l+ K2 U! c8 o 6.5 高级一对多和多对一映射 2 O. K/ P0 \+ t5 @
6.5.1 双向关联模型
& S' \& q4 @% G3 S5 G, e) R1 i& f8 J 6.5.2 双向关联
! E- ^, z8 R# g# K' I- ] 6.5.3 一对多(多对一)映射的一般步骤 ) Y5 b, b0 |, u# Q
6.6 多对多(@ManyToMany) $ w$ y$ s7 m+ J
6.6.1 多对多模型(单向)
/ s9 H+ i$ @8 r8 B& N; c* X, E9 P 6.6.2 映射策略——表关联
9 r" ?+ \9 h6 K f* d: G# o2 |' y 6.6.3 @ManyToMany # a5 X& P- ^% `3 x8 q, d9 X$ M9 V
6.6.4 双向关联模型 # w9 g" a0 M# p9 X# B
6.6.5 默认关联 / _9 R% U z; h5 ?
6.6.6 多对多映射的一般步骤
8 F; E# z: g) @4 d: U- g2 H$ f 6.7 集合类的选择 ~. f# G6 `2 u1 ?- ^, a a
6.7.1 集合类的区别
) z# _+ h2 u2 E# \% K 6.7.2 带排序的集合
( g V7 V/ R* X 6.7.3 带Key值的集合
( Z* k: {8 m$ N 6.8 关系映射示例:客户关系管理系统 ' l' n0 V1 ^9 O( Q
6.8.1 实体关系类图
0 ?0 f! i) x9 V: z7 n 6.8.2 数据库表结构 ( f% b( Z, S) P$ N9 r1 n( s
6.8.3 客户实体
! o! K' t( v- j/ C y, P/ Q1 H. G 6.8.4 地址实体 ! y$ a+ J( y% q6 S+ S5 _0 D
6.8.5 联系人实体
$ c, s6 s- o. ~8 U8 u2 a" [ 6.8.6 头像实体
5 p' k! ?( F# ?! ^6 L 6.8.7 电话实体
1 Y0 z$ a1 {. _; L& D+ V/ ], k 6.8.8 订单实体 8 N4 ]! s2 A* v& R0 ~8 {
6.8.9 订单明细实体
( Z. z# S" p+ Q3 U7 R2 P* e 6.8.10 产品实体 a* ~& w0 H: x' |' ^- w1 G
6.9 本章小结
% ~6 i( T' O% f( F 第7章 实体映射的高级应用 ' E5 g5 p. d6 w
7.1 多表映射
6 [8 i' H6 W5 [6 a+ S 7.1.1 两个表映射为一个实体 : }9 G9 @1 |3 b
7.1.2 从表注释(@ SecondaryTable)
7 g% w5 B8 h' V" Q: T: k2 z% k 7.1.3 多个表映射为一个实体
3 ~4 R9 h2 `5 H5 {/ |1 \: n 7.1.4 多个从表注释(@ SecondaryTables)
3 b7 I: [' ~* l2 C0 i- u 7.2 嵌入映射
' R; R e) l8 j3 l7 U 7.2.1 嵌入映射表结构
: ]* r, T6 S6 f: o, E: u 7.2.2 嵌入类 1 i* ~% |* q; ~1 L$ M/ V, p
7.2.3 嵌入到实体
0 T7 K! l% z: U) l 7.2.4 映射属性(@AttributeOverride) & b# D% |: r3 q- n; y$ h% {
7.3 实体的继承策略
! h2 k1 l9 _8 v. K" U, ]2 Z 7.3.1 类结构关系图
0 P @. J2 a8 F$ E0 }; _ 7.3.2 三种继承策略
( a) R& l Q4 s6 f. D B7 r 7.3.3 继承关系的实体保存在一个表(SINGLE_TABLE)
5 E0 l6 z- u$ S( e2 y 7.3.4 每个实体子类保存在一个表(JOINED) ! g; e- a3 T4 a
7.3.5 每个实体类保存在一个表(TABLE_PER_CLASS) 4 |1 `; O' E9 ~5 B, X& e: h
7.3.6 三种继承策略对比
: K- C3 W) ^# m; f7 q0 H) j. ?5 B' ` 7.4 深入实体继承
" y' B2 l0 }& Q 7.4.1 继承自抽象(abstract)实体类 0 j4 e* y7 [* R- |( @
7.4.2 继承自非映射实体类(Mapped Superclasses) 2 s% W4 j4 w2 g, T" k8 X2 }
7.4.3 继承自非实体类 & E7 l1 y5 Q+ X E n
7.4.4 继承的设计重构 , t8 }6 U2 ~: r! A; Z$ f9 K* \6 U
7.4.5 带继承关系的实体查询(多态)
6 d, N) Z' U% \: g3 g$ @ 7.5 本章小结
* S2 Y! k1 B) k* l% T; }6 ?( e 第8章 实体管理器(EntityManager) 4 {% M$ U v2 B6 |
8.1 实体管理器概述
2 |! b3 [6 V* g0 k' w Y 8.1.1 什么是实体管理器
0 U; t$ R; X: M. S 8.1.2 Entity Manager API
/ V% Q o" u3 Q 8.1.3 EntityManager方法详解 8 _( J; Y' N1 B6 U1 j. }# q
8.2 操作实体(CRUD)
4 y- N3 T# h/ s2 c g0 X5 B 8.2.1 创建实体(持久化)
+ g2 c! _: i/ j 8.2.2 持久化带关系的实体
% H2 D$ I- r' w3 j 8.2.3 根据主键查找实体
5 m( `/ f8 W9 w: Z 8.2.4 实体属性及实体的加载方式
6 J9 V( s& } l+ j% g& t 8.2.5 更新实体
+ i9 i, e+ Y: x4 d) Y& e% Z 8.2.6 更新实体关系 % ?1 q' h+ ^3 x2 e" G+ Y+ A2 T
8.2.7 删除实体
" T2 E; W5 c. m v4 o, @ 8.2.8 删除关联的实体
$ C5 H o7 o" K3 ^+ r 8.3 实体的生命周期
; Y5 T% ?/ w: B- r9 { 8.3.1 实体的几种状态
5 }; e3 e/ y9 |+ A- L 8.3.2 瞬时状态(Transient) $ |+ a: c1 @* Y
8.3.3 持久化状态(Persisted) ( C6 `& M6 e2 q5 q. }
8.3.4 托管状态(Attatched或Managed)
/ g* s: d7 f" O& g+ G0 b& G 8.3.5 游离状态(Detached) : L4 {1 V$ p. q* T* r
8.3.6 销毁状态(Removed)
, i; T4 s3 `2 [8 {; g$ _ 8.3.7 分析实体状态实例
8 t ^" K, f+ A, h% U5 w1 {# D 8.4 实体的高级操作
+ c& _! [, M: r# }4 ?/ N' Y 8.4.1 实体的联级操作
8 H5 h4 W7 B z 8.4.2 获得实体的另一种方式
% y z: |2 V* U6 @( I/ O' i, m) O 8.4.3 同步数据库(flush与flushType) 0 z! \2 ?$ M$ o+ h
8.4.4 refresh()和clear()方法 B/ J8 C8 k* N
8.5 实体监听器(Listener) - H" G( l; @: W8 e3 \. l
8.5.1 回调事件(Callback Events)
" _6 i* M5 _6 [2 p9 i: [2 x3 H 8.5.2 监听器定义在实体中
2 `+ Q1 ^: C3 f. @2 R( g 8.5.3 监听器定义在实体外
5 ^( X7 x$ v' B4 h3 w 8.5.4 默认实体监听器 3 {+ W3 ~# t9 \& y8 v
8.5.5 继承中的实体监听器 ( I& B; P. t2 J- w7 f/ t$ `& X
8.5.6 监听器的调用顺序 ) m, ?* ?8 H+ H0 R! t
8.5.7几种监听实体方式的比较
3 y" I' X# @; V' _( O& X% N$ N 8.6 本章小结
4 V+ n" e I2 w# p8 z+ `6 c 第9章 查询(Query) " C/ z8 u* a! e8 P
9.1 Query 概述 ) B4 F0 P5 P) H
9.1.1 一个简单的查询示例 ! k% L) E e; V: u$ u
9.1.2 Query API
. M( U# P8 C7 W* I% N 9.1.3 Query 方法详解 - f) o. T u& n3 D2 ?
9.1.4 Query的简化写法 $ z1 f+ o5 W0 l. f
9.2 JPQL入门 1 |* Q6 K& S$ a8 V. \* s
9.2.1 查询实体
" x( E7 y7 G) J+ X) t! t 9.2.2 查询实体属性 4 C h" }! F# I+ K: S7 r, _+ D
9.2.3 查询关联实体 y- E2 k3 l/ E/ S
9.3 准备查询 1 {3 n6 V* ^1 P6 t6 m2 A+ H
9.3.1 查询参数方法一——命名设置参数 8 y+ C( V3 d3 M6 k- I6 _2 B
9.3.2 查询参数方法二——位置设置参数 4 W: T* U- z: B7 q: f- ?
9.3.3 不带参数的查询
4 z9 S: g. ~/ u- ^- D 9.3.4 查询策略的选择 & i! n. S$ V8 o" T# e
9.3.5 分页查询
, n. t- k- V8 Z# A! O* u: O1 X7 h 9.3.6 设置提示(Hints)
; `. [, |: N9 d 9.3.7 设置提交模式(FlushMode)
3 ?4 i) @1 B, \. a& O 9.4 命名查询(Named Query) + E8 Z! Q9 ~, f0 j
9.4.1 命名查询示例 ) b/ K x) P. e& S2 ^5 z- X( N) F
9.4.2 定义查询命名 : W4 Y6 E: ]4 P& m
9.4.3 @NamedQuery注释
5 k4 g4 A t0 I! G& ] 9.5 查询结果的处理 1 S0 V% w4 S9 Y x
9.5.1 执行查询 : p; {3 X( \, R' V( u( D
9.5.2 查询结果的类型
! O3 B) H) ^6 \3 I0 Q, R; x* n 9.5.3 查询结果为实体
. P' [8 N$ _$ e 9.5.4 查询结果为基本数据类型
w1 m" H* Y9 P9 I" D( k$ L% @ 9.5.5 查询结果为数组
, r3 Q; \9 P% J# }! M 9.5.6 查询结果为自定义对象 ! M& g0 U. j; q% d
9.6 本地查询(Native Query)
# w5 d: w) S* h# {9 ~ 9.6.1 本地查询概述
; ~1 N9 `" a7 @: R, c 9.6.2 执行本地查询 P, Q/ N9 T# h7 f( ]: C
9.6.3 查询结果与实体映射
" r7 b) u. u2 {' j. i* n 9.6.4 自定义查询映射 1 [8 \6 T" w- \: W
9.6.5 @SqlResultSetMapping # i; l9 P" G# p
9.6.6 @NamedNativeQuery本地命名查询 % ^: |; p V# M, a4 x; D
9.7 查询技巧
, ^2 ?) v. y& E+ e5 M! z" X1 L. R 9.7.1 日期类型的查询 9 r) w1 _# ^- q% H5 g
9.7.2 动态查询
+ w" y6 Z0 J5 j3 @$ A) o# M3 Y. ~ 9.8 本章小结 3 e" Y( W& W; m1 C% l7 R& O: W
第10章 查询语言(JPQL)
) r' \1 e! s8 C: d 10.1 JPQL基础
/ P: a. I0 h/ u 10.1.1 JPQL基本语法 * L+ n$ i7 C1 r0 L
10.1.2 SELECT子句 ! M2 j w, Q9 q: }; q/ ]
10.1.3 继承实体的查询 + m7 ]; t' @- x% {# r. F4 d
10.2 FROM语句 ~/ e) N6 Z% |5 @; C9 C
10.2.1 FROM基本语法 " Y; h# q% [" U5 d/ V1 B3 L0 a! X8 l
10.2.2 基于集合实体的查询(关联查询)
" t- |5 \4 e2 p( Q 10.2.3 关联查询 ! f9 B A# Q# [, _
10.2.4 内连接(INNER JOIN) ' H0 C( A3 ^, |% @
10.2.5 左连接(LEFT JOIN)
9 U& q/ |9 L. [* ^ 10.2.6 抓取连接(FETCH JOIN)
$ W' U( D2 I# B& J+ h! W 10.2.7 唯一性查询(DISTINCT) " M* U: q& v$ O+ \
10.3 WHERE语句 1 X4 k/ h5 G" \) P0 q: F f' w
10.3.1 WHERE基本语法 , T; M, r. q& k: B3 A- `) ]
10.3.2 直接量(Literals) ! N r6 l b' y8 z" x5 a
10.3.3 查询条件操作符优先级
+ K' \ E6 F7 u5 e 10.3.4 算术操作符(Arithmetic Operators)
) {6 C* V) D ?. b* g# p 10.3.5 逻辑操作符(Logic Operators)
( K! y: D+ {( K! \ 10.3.6 比较操作符(Comparison Operators)
' h2 a: {, T5 ^. P" y 10.3.7 BETWEEN操作符 , F6 o! b; p$ K( m# T
10.3.8 IN操作符 4 |7 \- w( S% d& Y0 {9 b
10.3.9 LIKE操作符 + t; g) u1 F- N: e' |) d0 @
10.3.10 NULL操作符 ' ^6 v" G- y3 N, k
10.3.11 EMPTY操作符 & U3 q. Q; Y5 Y2 @' u) ]
10.3.12 MEMBER OF操作符
. w' Y1 i! U1 I( S- B0 y. U" A 10.4 函数表达式 : ?0 j' Y8 `6 w, e+ q) Z, a+ m
10.4.1 字符串函数 5 F+ I' i7 J3 }5 p
10.4.2 数值函数 % S- h+ S, G I$ x
10.4.3 日期函数
% m& U1 U: W7 B6 Z6 N 10.5 子查询 0 _) c* U2 Y) {1 j' R, h" p. v
10.5.1 基本子查询 . E7 ? @. M6 P& k1 W
10.5.2 EXISTS表达式 6 S8 o0 _/ r U, s! ?' w2 R, Z
10.5.3 ALL和ANY表达式 / F2 V7 P0 \# p, o3 G5 P+ A
10.6 分组查询 " N H9 S0 [6 O! @
10.6.1 分组查询基本语法 # a( l/ E* Y5 F v
10.6.2 分组查询函数 - T0 t \ s+ x6 H
10.7 ORDER BY表达式 7 V/ K9 C+ s) V' M$ q8 |! x3 D
10.8 批量操作 * j- ~- O$ c+ x' z5 r, S
10.8.1 批量更新
# Y5 m* c5 y) Y$ ^9 U 10.8.2 批量删除 ) `0 D# N0 z) X/ ~" g3 v) t* O
10.8.3 执行批量操作 - R+ w9 ]0 \9 t+ H4 f5 V
10.9 本章小结 T1 x' ~9 u3 g1 p3 E
第三篇 JPA高级应用
1 z* L9 K6 Y U2 n5 B! @) U2 t 第11章 持久化上下文 2 y2 k. [) \1 e4 B
11.1 获得EntityManager对象
1 _7 r9 G, g3 C6 r; q6 `. ~ 11.1.1 Java EE环境与J2SE环境 , i, Q0 t. W. [' g8 [
11.1.2 两种类型的EntityManager对象
2 q5 Q; `- l: d8 [) L% b 11.1.3 容器托管的(container-managed)EntityManager对象 & n" H, t0 [$ d) g% _# P9 |
11.1.4 应用托管的(application-managed)EntityManager对象
7 `. m" j- {5 \. D 11.1.5 ThreadLocal的使用
?& @: K% T/ W 11.2 实体管理器工厂(EntityManagerFactory) ! m* Z. ?% A( | s& d, U" y" v
11.2.1 javax.persistenc.Persistence API
2 ~" |: Z9 J+ a( Y- [ J 11.2.2 EntityManagerFactory API
0 q. j# [2 _/ b9 T 11.2.3 实现自己的JPA
7 ?1 S3 F9 Y6 P6 J6 J 11.3 容器托管的EntityManager持久化上下文 ! j: `1 w' h: M5 x% s
11.3.1 事务范围TRANSACTION ) J" P$ u7 \! L# i
11.3.2 扩展范围EXTENDED " S4 a) n4 T0 r$ O8 H& r
11.4 事务管理 9 T# }2 ~* Z% T6 J Y, G; b
11.4.1 事务与EntityManager 0 |! R- R! Q; Y" H- }' z+ w
11.4.2 JTA管理事务 + q2 G9 A+ ]+ u6 g: u
11.4.3 RESOURCE_LOCAL管理事务 ) c5 g$ q1 x/ }$ }, X H+ B* J% f
11.4.4 EntityTransaction API $ M* k B" v1 a' F; A8 g& Z
11.5 应用托管的EntityManager的持久化上下文
+ @# K3 K1 {: ^# Y, P$ Z 11.5.1 无状态的会话Bean与JTA事务(事务范围)
b* |& `6 [4 O! [2 f 11.5.2 无状态的会话Bean与JTA事务(扩展范围)
* p5 @/ T3 B. [2 k* @! K6 o5 L 11.5.3 有状态的会话Bean与JTA事务 0 W& v( t' H- {& t7 s$ o; b. S
11.5.4 RESOURCE_LOCAL事务
0 ^# P# r' r# T' h. p7 L3 I 11.6 本章小结 ; r- M3 S' |7 f9 S7 l
第12章 XML映射文件 1 W7 {7 T5 x9 A. A
12.1 XML映射配置VS注释
8 |7 ] ~8 [: j2 a8 c5 x* M 12.2 映射文件概述
! Z% @& C2 \4 S 12.2.1 映射文件的保存位置
; x+ |0 e7 h: T2 T 12.2.2 获取映射文件DTD 6 P) F |5 g( u3 g h6 J8 O4 W5 v
12.3 映射基础 / | O, [- l' v7 m6 N. [5 R% ^9 d
12.3.1 映射文件的基本结构 , d' i' i. q: A9 F% R" [2 j3 J. A
12.3.2 映射文件的基本元素
1 ?- C( h- \% g 12.4 配置注释< persistence-unit-metadata > ) A$ N, h7 L" U- E4 }
12.4.1 禁用注释
- o# ^9 N% \ A* z, ]8 f3 O 12.4.2 持久化单元的默认配置
% m% N: b- I: T' g* G, ] 12.5 映射文件的默认配置
0 z, N5 e# ^; |/ x 12.5.1 默认包名
0 H( l8 \* } r 12.5.2 默认schema ' ~4 y O7 h# D$ f# h. T
12.5.3 默认catalog
8 [5 ~+ y' q' X4 M+ g 12.5.4 默认访问类型
, s7 Z* F3 r( }; E 12.6 配置查询、生成器和查询结果
: h2 u* M; s) T0 d5 Z# x$ Z9 E8 | 12.6.1 sequence生成器 ! ?5 j' w* W N) G8 S
12.6.2 表生成器
' }: L+ W9 _. \! d' p& J% N 12.6.3 命名查询 4 d% R) q: D' c4 ?& v
12.6.4 本地命名查询 ! N* [# p6 c6 B! u# D5 N
12.6.5 查询结果映射
6 N1 C9 n% t7 o. P" h3 N 2.7 配置实体
/ @, I5 H, u* O( I) ]% [1 Q6 g _: ~+ v 12.7.1 基本配置 - e0 m6 y* ~3 v0 p1 \
12.7.2 配置表
! F/ @- R) T Z+ F# }9 E* K! _) j 12.7.3 配置从表
+ Z m" c: z; p) l ]% E% V 12.7.4 配置属性 * b5 j0 m7 m& U3 |/ a# c# Q6 d
12.7.5 配置实体关系 7 Z2 }" i8 G: X6 n' I, v G
12.8 配置继承 6 m% d8 T0 p# Z4 b2 T9 M; F, E
12.8.1 配置所有实体保存为一个表(SINGLE_TABLE)
) _3 j; i: O2 J 12.8.2 每个实体子类保存在一个表(JOINED) " ~4 M+ Y1 X: }
12.8.3 配置非实体类 , W5 l: l; ]0 E0 }8 r2 S4 F
12.9 配置嵌入类 8 I) | Y w! y) o' S6 Z/ {
12.9.1 配置类
; T' D+ T$ S8 W" F0 u4 o( G 12.9.2 和配置嵌入实体类 3 y: z( A- p- B) J/ h/ y- u8 [
12.10 配置实体监听器 3 K1 U, J2 ?/ Y. B
12.10.1 监听器定义在实体内
9 n% i3 ~8 x$ \ 12.10.2 监听器定义在实体外 9 b, ], _2 X" T- o3 w2 Y
12.10.3 禁用父类监听器
" {2 y3 P O& ` 12.10.4 禁用默认监听器 E+ O# J5 P2 b# i
12.11 本章小结
i: j1 w. {8 Y- W7 O0 ? 第13章 打包和部署 1 z9 Q6 y# E7 \9 H1 ^
13.1 Java EE应用打包概述 4 b. e) L% R6 x# ~5 I' h
13.1.1 Java EE包的类型
+ r& v* A! j% I0 o 13.1.2 EAR包结构
9 Q( _ F: f! ~/ C7 d, w5 H5 I y 13.1.3 EJB-JAR包结构 ! d6 a3 t2 ?) H& W9 I+ Q* C
13.1.4 WAR包结构
' Y4 U' B$ b0 {2 }& [) f 13.2 Java EE类加载机制
4 i" A# T$ ]4 m* s* y2 ~2 I! s* Q5 _ 13.2.1 Java类加载器
8 e: Q6 Z8 x9 S 13.2.2 类加载顺序模型 ! Q( Q8 W, g8 t4 V, H
13.2.3 Java EE应用的加载顺序 # A& \+ A6 L2 j( G
13.2.4 类加载原理示例 ' Y8 c& ~. p4 N7 Z* _
13.3 配置persistence.xml 9 C7 h" I9 D& S
13.3.1 保存位置
/ X2 ]7 L( o# ]( Y 13.3.2 persistence.xml的基本结构 8 P+ c9 ?; q# u6 R: ?' M0 o
13.3.3 配置持久化单元名称
& v0 u; o7 C/ i w* {! ~ 13.3.4 配置事务类型 + O& K6 `/ B O, p% `) K6 U& m
13.3.5 配置实现者 ; u) c3 D0 @4 b$ E8 r6 [
13.3.6 配置数据源 . w. ~9 X+ |# b9 {+ u! o
13.3.7 配置映射文件 p+ l0 M5 v/ o! N V5 h
13.3.8 配置管理类
2 N& \2 Q" [) i5 A J" ], Q4 @ 13.3.9 配置自定义配置 % x0 s1 e3 I" _0 L" y4 ^+ T
13.4 JPA打包最佳实践
! b* o; o& H! f* q! R; y 13.4.1 J2SE打包最佳实践 5 W, m4 {% O6 H4 D) B0 D
13.4.2 J2EE打包最佳实践——与EJB组件 # |4 A) w. k" w, ~+ C0 M
13.4.3 J2EE打包最佳实践——与Web应用
" _. R" {* v, H% J3 j# E 13.5 本章小结
! X$ r: `* R6 g& r5 D: n/ } 第14章 JPA实现框架
9 k! d ?1 M9 Z7 k# Y 14.1 hibernate JPA
; n3 q! J; J, w 14.1.1 Hibernate 与JPA $ |- v5 y" s; R+ }
14.1.2 Hibernate下载
' b$ l) R3 \: F" Z( P 14.1.3 配置方式
4 m. w; r) O5 j5 n+ Y 14.1.4 基本配置 ) S9 r$ f/ I7 Q" W5 ]+ [2 D! D
14.1.5 配置日志
0 z+ J' M$ f- G: { 14.1.6 配置缓存 i% d# c% z1 v; ~
14.1.7 配置JDBC和数据库 8 w& B, l. p1 P$ g4 N! w) N
14.1.8 其他的常用配置
1 N* G2 c+ D% K6 c" } 14.2 OpenJPA & t. b% R4 A, d i2 Q
14.2.1 OpenJPA与JPA d; S! ?' D* g4 h
14.2.2 OpenJPA下载 : C! \, l9 Q2 U; A& Y `9 r( |+ l
14.2.3 配置日志 ( z- ^/ y6 |; b$ ?
14.2.4 配置缓存
4 P2 |3 H" i& C3 X# X2 M+ h: u 14.2.5 配置JDBC和数据库 , ?4 a2 I7 Q! d8 L
14.2.6 增强器的使用(Enhancer) ( A) H" P6 q5 U {
14.3 Toplink JPA ( J3 v/ W j. a
14.3.1 Toplink 与JPA
& |2 E8 l) c& m2 l2 m* m 14.3.2 Toplink下载 2 t! f( |4 m) W/ Y! X* F5 \! M
14.3.3 配置日志
* E4 Y0 X: b/ K& i; D 14.3.4 配置缓存
1 w3 k3 x( p: {% N+ A6 M9 h 14.3.5 配置JDBC和数据库 8 v) M" e' C( V6 O8 @/ u4 D
14.3.6 配置DDL , X& Q, ?+ P3 d- U& ^
14.3.7 其他自定义配置
$ m* H3 F+ \( c5 C/ u( ^% B5 Y8 u 14.3.8 配置查询优化
8 d% B* Z2 ~7 N4 a! T 14.3.9 加载优化 * z0 L3 N* w h; p* C2 Z
14.4 本章小结
, v4 a! W. b/ Z0 l8 o' o, w. s. ^# W 第15章 JPA与Spring集成 ( T' R' I6 a3 q: }
15.1 Spring概述
8 ~2 h+ |" F& }2 t0 o 15.1.1 什么是Spring ; h. X8 r6 W3 y, [1 z
15.1.2 Spring的特性 & M( Y' T5 h$ E7 j9 V
15.1.3 Spring与JPA
* z/ i. y* _3 z2 k; \5 u 15.2 开始Spring之旅
+ i# T" z6 |# L3 g) Z 15.2.1 IoC容器
3 I. f) L0 E1 E8 G T7 q) | 15.2.2 普通的Bean
* \5 J: M% }5 t, y 15.2.3 容器管理的Bean
' u" ?3 R% q& {% @% b 15.2.4 在容器中运行
5 Y# B! W: b4 W% }+ I" Z 15.3 Spring中集成JPA : q5 p. i) d2 W: c
15.3.1 集成前的准备 / C! _2 c2 ]; s) M( z4 V ?
15.3.2 配置EntityManagerFactory
. \( c1 Y" w$ S$ w 15.3.3 配置事务Transaction 7 M" E- K9 C# i* x1 l, E4 u
15.3.4 运行程序
5 E. W& q% \& k 15.4 Spring Web框架
# c: d# _; m/ r1 R" x% s- t 15.4.1 Spring Web概述 0 k4 @- q8 \, y+ Y0 K& v: W( Y
15.4.2 配置Spring Web应用 ( o. r+ C& @: ^' e5 C
15.4.3 开始Spring Web之旅 # C+ D. k+ K$ f4 |# a n& D0 U+ X
15.5 Spring Web集成JPA
: h/ Y1 O( n! v9 G# H) T 15.5.1 集成前的准备
6 |0 P1 J/ Y& g 15.5.2 配置数据源 8 J1 n2 u* W% ]4 r
15.5.3 注入业务逻辑 ) N& G/ X/ c c$ d o. O
15.5.4 运行程序 7 W+ q- g/ v {/ y" ?7 w
15.6 本章小结
' z, }4 Q7 _9 ` N1 S3 E* k( }3 I第四篇 典型案例
, z( R+ }8 B+ V0 H v1 X Z0 { 第16章 学生成绩管理系统(Servlet+JPA)
1 t% `4 f, r" ^6 t 16.1 系统概述 . Y( a: ~) d3 ^
16.1.1 需求描述
9 j+ n( z$ x1 l! }4 Q, b0 ] 16.1.2 系统预览
0 g/ l5 C4 w5 m6 p0 U. a1 U 16.2 系统构架 6 g) b+ k6 X: V4 P; ]1 }* k
16.2.1 系统结构
0 W' r2 X5 H" ~5 @0 w# B7 x 16.2.2 CharacterFilter
$ g2 S5 _) o) G- X 16.2.3 异常处理 * p6 W7 r6 }! X9 u# y; v
16.3 数据库设计 . [/ a2 D% l3 y$ e1 a `! Z
16.3.1 数据表UML
3 P; L" N/ D* h- E$ _ 16.3.2 SQL脚本
5 i( y: Z2 _9 `. g8 U* c 16.4 JPA实体设计 4 F# H) R* F- A* R' M1 ]0 [7 d
16.4.1 JPA实体UML 6 n0 v, u# V* T
16.4.2 JPA实体类代码
; p0 o/ l( x3 z 16.4.3 persistence.xml配置 - n5 |, c& \6 p3 V: D
16.4.4 JPA实体的部署 5 \0 m+ k3 Q) X# T/ z
16.5 班级模块
- a2 q# k! X( k/ Y, s% x 16.5.1 添加页面addClass.jsp " k" A* m7 I# B
16.5.2 添加班级 1 d* e* v/ C6 `: _, p, J/ r
16.5.3 使用标注获取EntityManagerFactory 380
$ q% m* R8 c/ ] 16.5.4 班级列表
6 b5 }, S. m6 I) r! T# v0 H' B 16.5.5 修改班级 ( t9 ?- @4 l3 Z
16.5.6 删除班级 9 {9 }. c1 @3 y; Z
16.6 课程模块 5 p7 v# {9 S$ A+ X
16.6.1 添加、删除、修改课程 / W8 `/ D( E% W- ^1 g
16.6.2 选择听课学生 ( j7 T& O" E; Q9 O3 e" L4 L8 l
16.7 学生模块 7 O% ^+ I/ j4 y3 n; o
16.7.1 分页显示学生列表
9 A0 B2 N& e: S& K, a" k3 E+ ]6 V 16.7.2 添加修改删除学生
# u$ i* U! U* G. Q! i! s 16.8 分数模块 6 X2 a" S1 m- R! L) ?/ b
16.8.1 添加学生成绩
1 b4 Q6 r! v. Y8 f: F9 `! U 16.8.2 列出学生成绩 : O7 s% w8 b( P: t
16.9 本章小结
* {6 @- q1 S. X4 N3 P7 ~& { 第17章 宠物商店 (Swing+JPA)
. V8 Z9 h6 T) G 17.1 系统概述
3 b* s) G5 r7 H 17.1.1 需求描述
J8 m0 n0 p8 u7 p2 N 17.1.2 系统预览
! L0 u' n( k' g! B3 s6 R2 i 17.2 系统构架 # Y8 D5 ~& W; s7 _% i d- o
17.2.1 系统构架
6 F3 R$ _6 ?7 j4 o 17.2.2 实体类设计 : \ Q: P6 X f# n2 T
17.2.3 业务类实现
) u& m; Q: z# E- [! x* g+ F% c 17.2.4 Session Bean查找
) k3 U* S' v/ v) R) B4 ` 17.2.5 persistence.xml配置
( m, R1 S1 n% \9 C+ A u) {( J, G 17.2.6 EJB3组件部署
/ e' Z9 o: d. ]# C0 D2 o+ A 17.3 登录对话框
$ Y( h X2 F: P0 S0 G 17.3.1 登录对话框 - @ B& ?+ V" v
17.3.2 异常信息显示 % V8 K# c: D9 S X
17.4 主购物窗口 * w, z5 B, _% ^( J: Q0 B
17.4.1 主购物窗口 " n% m) @5 i$ f* f: W% b; g8 k
17.4.2 主购物窗口代码 8 c1 U8 U) _& N& q* J. K
17.4.3 宠物列表Model # v! H" B E# w8 V+ e
17.4.4 添加宠物类别命令
4 I0 C; N: ?6 U/ y B/ k8 x" h 17.4.5 删除宠物类别命令
) M8 g' B. }- N& y2 d: R+ y' { 17.4.6 添加宠物命令
* v5 f1 u: I1 p* b" V 17.5 购买窗口
& p# M. D1 D/ m. r& X 17.5.1 购买对话框 , M3 u! |8 Q( [, W) @
17.5.2 购物车对话框 8 k8 u1 X6 L' k. g X/ K, I; J
17.5.3 付款操作 6 I. G8 \7 e# m, m$ @! ^
17.6 本章小结
, s" p+ T" y) l: P& h0 a/ B 第18章 博客系统(Struts2+ Spring2+JPA) & x* E3 w: N% I
18.1 系统概述 ; v, Y& V; L: p* B; y
18.1.1 需求描述 , d( {9 m7 f/ n% G0 k- G* N
18.1.2 系统预览 % H9 q9 Q e$ e! j" _% U
18.2 系统构架
. F! [" G5 T1 x- ?" |4 u! c5 P' c 18.2.1 系统构架 % L: T& {/ U" g( Y& o' ]2 @
18.2.2 执行流程
* A) p/ Q+ A& H! n8 {9 _9 l 18.3 实体类设计
7 n- d0 _/ Q4 e! e% H 18.3.1 基础实体BaseBean 0 H. X. _7 U+ ^
18.3.2 用户实体Person
* v1 T/ q( X$ E# j 18.3.3 爱好实体Hobby
% Y( g) g7 `4 O 18.3.4 博客实体Blog
9 p6 L. T- l2 y+ i* i 18.3.5 类别实体Category
) ^+ C4 g: A! O 18.3.6 文章实体Post
* t# T( E0 U& j 18.3.7 登录信息类PersonInfo
! X1 }: S. o% s3 i! Q+ e 18.3.8 persistence.xml
4 o) ^/ a8 A( m5 U 18.4 业务模块设计 # n# r% F* A p& \4 k6 w4 \4 b$ }" M
18.4.1 DAO层接口
8 z* [+ ]3 M& E( ^ 18.4.2 DAO层实现 * U5 a4 B- x" l0 v5 I
18.4.3 公共Service层接口 ) @3 h# G( Q2 l5 R% T
18.4.4 公共Service层实现 P. Q+ D; v' B' j* s- O+ S7 z: x
18.4.5 用户Service接口 : c; _3 L! Z" F! E- F7 \4 A0 G
18.5 用户模块 ! a$ V/ r* h+ ]3 l' [( J* c& P
18.5.1 BaseAction基础类
; s# X& V; G- ^: e1 c' S 18.5.2 用户注册
" r$ x# x& g: v9 } 18.5.3 struts.xml配置 6 _. i0 I$ x" Q n5 `. _! E
18.5.4 ApplicationContext.xml配置
" p- o* z e* g! B- c; K0 ~4 m% ] 18.5.5 web.xml配置 ; p P- ^; ~4 w, }% K! M( g
18.5.6 register.jsp
5 k* T S9 f) T7 B) V 18.5.7 header.jsp,footer.jsp
( ]+ s& w% |2 V5 } 18.5.8 注册表单验证 6 ~1 y& u, k2 X8 d! A* ?
18.5.9 异常处理 ; R" A* K4 P }3 b* V
18.5.10 用户照片文件上传 " j5 L3 W& t. U. `* b: s0 o: y
18.5.11 用户登录注销
8 y n5 x: w" D3 Q5 H9 a 18.6 博客模块
! b+ E) e* \+ U( O- r 18.6.1 开通博客
; {+ j1 Z7 {& C9 U; a 18.6.2 浏览博客
5 A/ X) v! y6 r 18.7 类别模块 5 v! @3 o& Y& l5 r1 _0 V
18.7.1 类别列表 2 n) {$ E. B: Z7 s& ?
18.7.2 添加类别 * I# v: @! O ^! N& R
18.7.3 浏览类别
0 [9 d( M5 e1 a/ N; T8 M) M- t 18.8 文章模块
: s4 ?# n, Y# ~1 u8 o 18.8.1 列出文章
: e* k- E% _4 Y& ^& `( |$ P) L 18.8.2 添加文章 & ]9 I( j, p" P% {2 J# c
18.8.3 浏览文章
5 S- @4 ?( r6 U2 f 18.9 本章小结
# V. R- z, L% a& _, |; H附录A JPA ORM Annotation参考 + `1 R. |4 \ `. o' Z
附录B 其他的JPA Annotation参考
8 {1 v* t1 e) @ T4 H4 W. `# N |
|