本書はサーバーサイド(Spring Framework等のOSS)のJava開発業務で半年程度の経験のあるWeb系技術者をターゲットにしたHibernate入門書です。
※第2版では組版処理システムを導入して索引を追加、またコードが読みやすいようにレイアウトを全面的に変更しました。
Hibernateによるドメイン設計に関するトピックを広くカバーします。後半の章はモデルソースコードの自動生成(MetaModel)、大量の同時アクセス処理対策(JMS)についてもカバーします。
Hibernate(JPA実装プロバイダー)のみが本書の内容であり、JavaEE環境(アプリケーションサーバー)でのJPAは他書で別途学ぶようにしてください。JPQLについても一切カバーしていませんので、業務系アプリケーション開発者よりもWeb系に親和性が高い内容となっています。
参考のためにXMLによるドメインのマッピング(hbmファイル)を使った方式も解説しますが、数例を除いた全ての実装例ではJPA注釈を使います。hbmファイルを使った例はとばして読んで頂くことも可能です。
SQLとRDBMS(MySQL/PostgreSQL/Oracleのいずれか)の知識と経験は必須です。Mavenは少なくともpom.xmlを編集した経験があることを前提とします。
さらにSpring FrameworkやJMS・マルチスレッドの知識も後半の3つの章(第十四章、第十五章、第十六章)を読むためには必要です「Spring Framework マルチスレッド入門:上巻」を合わせて読む事を推奨します。
LomBokのインストール
LomBokの使い方
MySQLの設定
PostgreSQLの設定
Mavenプロジェクト
Hibernateの基本属性
Hibernate Session API
JPA EntityManager
HQL(Hibernate版のSQL)
Hello, World
pom.xml
HikariCPの設定
HikariCP/Hibernate(MySQL)の環境設定
HikariCP/Hibernate(PostgreSQL)の環境設定
H2/Hibernateの環境設定
オブジェクトの状態(Transient/Detached)
Hibernate Session API
HQL(Hibernate Query Language)
Queryインターフェース
イベント処理の検証環境の設定
Hibernateライフサイクルイベントのインターセプト
BaseSessionEventListener
EmptyInterceptor
SessionEventListenerとInterceptorの登録
EventListener
Integrator
Object-relational impedance mismatch
ORMの特徴
Hibernateによるドメイン設計
自然キー
複合キー
人工キー・サロゲートキー(Surrogate Key)
検証環境(PostgreSQL+HikariCP)
1つのEntityに複数のTable:@SecondaryTable
画像データ(バイナリ)・日付・時刻型
コンポーネントの検証環境の設定(H2)
Component: XMLマッピング
Component: JPA注釈
ネストComponent:JPA注釈
複合キー(Composite Key):XMLマッピング
複合キー:JPA注釈
サンプルコードの環境設定(H2)
Single Table(シングルテーブル)戦略
Table Per Class戦略
Joined(結合)戦略
コレクション(Java Collections Framework)
関連と方向性
所有者側と被所有者側
JPA注釈と関連
関連についての検証環境設定(H2)
単方向の1対1の関連(OneToOne)
1対1の双方向関連とmappedBy
補足:OneToOne(mappedBy)
双方向の1対1の関連(JoinTable)
optional=false
cascade
1対多の関連
単方向の1対多(One-to-Many)
双方向の1対多(One-to-Many)
1対多の双方向関連:JoinTable
多対1の関連(ManyToOne)
単方向の多対1の関連(ManyToOne)
多対1(ManyToOne):JoinTable
多対多の関連196
単方向の多対多関連(ManyToMany)
双方向の多対多関連(ManyToMany)
双方向の多対多の関連:XMLマッピング
多対多の関連:カスタム結合テーブル
NamedQuery
Lazy/Eager Fetch
Fetch戦略
Fetch戦略の検証環境設定(PostgreSQL)
FetchMode.SELECTとN+1問題
EagerとLazyとjoin fetch
Fetch戦略とN+1問題についての考察
Envers+Validator検証の環境設定(HikariCP+MySQL、EL/Joda-Time)
Hibernate Validator
Hibernate Envers
Envers/Validatorの検証
監査ログクエリーと妥当性チェックの確認
HQLの検証環境設定(MySQL+HikariCP)
HQLの検証環境設定(H2)
HQL表現
Criteriaインターフェース
Restrictions
Projection
Criteria API(Restriction/Projection)検証の環境設定(H2)
JPA MetaModelとJPAModelGen
JPAModelGenの環境設定(Maven)
Static MetaModel(JPA Canonical MetaModel)
CriteriaBuilderとCriteriaQuery
CriteriaBuilderと条件式
JPAModelGen:検証
QueryDsl
QueryDslの環境設定(Maven)
Qクラスの自動生成
QueryDsl: 基本API
QueryDsl: collectionとAPI
Spring Framework環境におけるHibernateとJPA
LocalSessionFactoryBean
Spring Framework+Hibernate+H2(注釈)
Spring Framework+JPA+H2(注釈)
Spring Messaging/ActiveMQとの連携
Springトランザクション
JMSトランザクション
JMSトランザクション設定:Spring Framework + Hibernate + MySQL5.x
JMSトランザクション:ドメイン設計
JMSトランザクション:DAO設計
JMSトランザクション:サービス設計
JMSトランザクション:検証
マルチスレッド設計
暗黙的(implicit)ロック
分離レベル
Locking(明示)
ロックの検証
デッドロックの検証
Deadlock: 複数ロックモードによる検証
競合の検証
競合:分離レベルの検証(PostgreSQL 9.4)
分離レベルの設定(HikariCP+PostgreSQL)
分離レベルの検証結果
並行処理のまとめ(前章も含めて)
EhCache
Hibernate Cacheの設定
自然IDとL2 Cache(2次キャッシュ)
※第2版では組版処理システムを導入して索引を追加、またコードが読みやすいようにレイアウトを全面的に変更しました。
内容
Hibernateによるドメイン設計に関するトピックを広くカバーします。後半の章はモデルソースコードの自動生成(MetaModel)、大量の同時アクセス処理対策(JMS)についてもカバーします。
注意点
Hibernate(JPA実装プロバイダー)のみが本書の内容であり、JavaEE環境(アプリケーションサーバー)でのJPAは他書で別途学ぶようにしてください。JPQLについても一切カバーしていませんので、業務系アプリケーション開発者よりもWeb系に親和性が高い内容となっています。
参考のためにXMLによるドメインのマッピング(hbmファイル)を使った方式も解説しますが、数例を除いた全ての実装例ではJPA注釈を使います。hbmファイルを使った例はとばして読んで頂くことも可能です。
必要な知識と経験
SQLとRDBMS(MySQL/PostgreSQL/Oracleのいずれか)の知識と経験は必須です。Mavenは少なくともpom.xmlを編集した経験があることを前提とします。
さらにSpring FrameworkやJMS・マルチスレッドの知識も後半の3つの章(第十四章、第十五章、第十六章)を読むためには必要です「Spring Framework マルチスレッド入門:上巻」を合わせて読む事を推奨します。
目次
第一章 Spring Frameworkのまとめ
第二章 Hibernate開発環境の設定
LomBokのインストール
LomBokの使い方
MySQLの設定
PostgreSQLの設定
Mavenプロジェクト
Hibernateの基本属性
Hibernate Session API
JPA EntityManager
HQL(Hibernate版のSQL)
Hello, World
pom.xml
HikariCPの設定
HikariCP/Hibernate(MySQL)の環境設定
HikariCP/Hibernate(PostgreSQL)の環境設定
H2/Hibernateの環境設定
第三章 Session
オブジェクトの状態(Transient/Detached)
Hibernate Session API
第四章 Query
HQL(Hibernate Query Language)
Queryインターフェース
第五章 イベント処理
イベント処理の検証環境の設定
Hibernateライフサイクルイベントのインターセプト
BaseSessionEventListener
EmptyInterceptor
SessionEventListenerとInterceptorの登録
EventListener
Integrator
第六章 Hibernate: ORMとドメイン設計
Object-relational impedance mismatch
ORMの特徴
Hibernateによるドメイン設計
自然キー
複合キー
人工キー・サロゲートキー(Surrogate Key)
検証環境(PostgreSQL+HikariCP)
1つのEntityに複数のTable:@SecondaryTable
画像データ(バイナリ)・日付・時刻型
第七章 粒度-Component
コンポーネントの検証環境の設定(H2)
Component: XMLマッピング
Component: JPA注釈
ネストComponent:JPA注釈
複合キー(Composite Key):XMLマッピング
複合キー:JPA注釈
第八章 継承-Inheritance
サンプルコードの環境設定(H2)
Single Table(シングルテーブル)戦略
Table Per Class戦略
Joined(結合)戦略
コレクション(Java Collections Framework)
第九章 関連-Association
関連と方向性
所有者側と被所有者側
JPA注釈と関連
関連についての検証環境設定(H2)
単方向の1対1の関連(OneToOne)
1対1の双方向関連とmappedBy
補足:OneToOne(mappedBy)
双方向の1対1の関連(JoinTable)
optional=false
cascade
1対多の関連
単方向の1対多(One-to-Many)
双方向の1対多(One-to-Many)
1対多の双方向関連:JoinTable
多対1の関連(ManyToOne)
単方向の多対1の関連(ManyToOne)
多対1(ManyToOne):JoinTable
多対多の関連196
単方向の多対多関連(ManyToMany)
双方向の多対多関連(ManyToMany)
双方向の多対多の関連:XMLマッピング
多対多の関連:カスタム結合テーブル
NamedQuery
Lazy/Eager Fetch
Fetch戦略
Fetch戦略の検証環境設定(PostgreSQL)
FetchMode.SELECTとN+1問題
EagerとLazyとjoin fetch
Fetch戦略とN+1問題についての考察
第十章 Hibernate EnversとValidator
Envers+Validator検証の環境設定(HikariCP+MySQL、EL/Joda-Time)
Hibernate Validator
Hibernate Envers
Envers/Validatorの検証
監査ログクエリーと妥当性チェックの確認
第十一章 HQL
HQLの検証環境設定(MySQL+HikariCP)
HQLの検証環境設定(H2)
HQL表現
第十二章 Criteria API
Criteriaインターフェース
Restrictions
Projection
Criteria API(Restriction/Projection)検証の環境設定(H2)
第十三章 MetaModel
JPA MetaModelとJPAModelGen
JPAModelGenの環境設定(Maven)
Static MetaModel(JPA Canonical MetaModel)
CriteriaBuilderとCriteriaQuery
CriteriaBuilderと条件式
JPAModelGen:検証
QueryDsl
QueryDslの環境設定(Maven)
Qクラスの自動生成
QueryDsl: 基本API
QueryDsl: collectionとAPI
第十四章 Spring Frameworkとの連携
Spring Framework環境におけるHibernateとJPA
LocalSessionFactoryBean
Spring Framework+Hibernate+H2(注釈)
Spring Framework+JPA+H2(注釈)
Spring Messaging/ActiveMQとの連携
Springトランザクション
JMSトランザクション
JMSトランザクション設定:Spring Framework + Hibernate + MySQL5.x
JMSトランザクション:ドメイン設計
JMSトランザクション:DAO設計
JMSトランザクション:サービス設計
JMSトランザクション:検証
第十五章 Hibernate Transactionと並行処理
マルチスレッド設計
暗黙的(implicit)ロック
分離レベル
Locking(明示)
ロックの検証
デッドロックの検証
Deadlock: 複数ロックモードによる検証
競合の検証
競合:分離レベルの検証(PostgreSQL 9.4)
分離レベルの設定(HikariCP+PostgreSQL)
分離レベルの検証結果
並行処理のまとめ(前章も含めて)
第十六章 キャッシュ
EhCache
Hibernate Cacheの設定
自然IDとL2 Cache(2次キャッシュ)