Hibernate ORM 5.3.9.Final User Guide を読むためのメモ

#この記事の内容
この記事は[Hibernateの公式ドキュメント](http://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html)の**内容を解説するものではありません**。
これから読み始める人、読んだことはあるけど確認しようと思ったらどこに記述があったか忘れた、というような場合を想定した**ドキュメントを読むためのメモ**です。
全体的にJPAの仕様とHibernateの独自拡張が区別しにくいので注意が必要です。

#2.Domain Model

##2.3 Basic Types

###2.3.1. Hibernate-provided BasicTypes
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#basic-provided
HibernateとJava、JDBC、マッピングに使用されるHibernate内部のマップのキーの一覧表。
テーブルのカラムの型が思いがけないものにならないように注意。
Javaの新しい時間型の対応も要チェック。

###2.3.5. Explicit BasicTypes
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#basic-type-annotation
特定のDB側の型に解決させるため指示のアノテーション。
Javaの型としてはStringだけどDB上では違う型の時は積極的に指定した方がよさそう。

###2.3.15. Mapping Date/Time Values
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#basic-datetime
時間系統の値について

>To avoid dependencies on the java.sql package, it’s common to use the java.util or java.time Date/Time classes instead.

せっかく管理してくれるのでjava.sqlの型を使わないようにしましょう。

###2.3.16. JPA 2.1 AttributeConverters
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#basic-jpa-convert
オブジェクト上のデータをDBのカラムへ移すときにデータの変換が必要な場合の対処方法。
この辺りはどのレイヤーに機能を実装するか難しい。

###2.3.18. Generated properties
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#mapping-generated
データベース側で生成される値を取り込むためのアノテーション。
DBの厳密なタイムスタンプや自動生成のプライマリキーをエンティティで使用するときのもの。
計算結果を書き込んだ際の読み戻しなどにも使えるけど実用性はあるかな…。

##2.4. Embeddable types
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#embeddables
組み込み型を使う時。テーブルに決まった組み合わせのカラムを作る時には便利かも。
座標とか曜日セットとか。

##2.5. Entity types
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#entity
Hibernateの山場。
JPAに規定されたAPI仕様とHibernateに実装された機能の間に差があるため、移植性を考える時などには注意が必要。

###2.5.7. Implementing equals() and hashCode()
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#mapping-model-pojo-equalshashcode
次の節と絡めて重要。そもそもオブジェクトの同一性って扱いが難しい。

##2.6. Identifiers
エンティティの識別方法について。Javaのオブジェクトの仕様と含めていろいろと考えるところが多そう。

###2.6.2. Composite identifiers
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#identifiers-composite
ここから数節、*複合キー的なもの*の扱いについて。

###2.6.9. Using IDENTITY columns
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#identifiers-generators-identity
DB側が生成するキーを使用する場合について。

##2.7. Associations
エンティティ同士の関係性について。いわゆるリレーションシップの設定周り。

###2.7.2. `@OneToMany`
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#associations-one-to-many
大部分のリレーションで重要になる1対多について。
JavaオブジェクトとDBの構造的な差から、単方向の関連性を使うことはあまりないかも。
[Bidirectional `@OneToMany`](https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#associations-one-to-many-bidirectional)が必読。

###2.7.4. `@ManyToMany`
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#associations-many-to-many
気軽に`@ManyToMany`だけを使うと大変なことになります。

##2.8. Collections
コレクションの管理方法について。組み込み型も関係してくるので随時2.4節も参照。

###2.8.3. Collections of entities
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#collections-entity
エンティティの関係性をJavaオブジェクトで表現するときにどうするかの説明。
これ以降の節は非常に重要なので一通り読んでおくことをお勧めします。

##2.9. Natural Ids
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#naturalid
ナチュラルID、JANコードやISBNコードなど、モデルに含まれるシステム外から来る識別子について。Hibernateの固有機能のようなので移植を考えるときは注意。

#3. Bootstrap
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#bootstrap
Hibernateの起動方法、オプション設定など。
Spring Bootなどに頼らずにコーディングする際や設定の内容の確認に。

#4. Schema generation
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#schema-generation
スキーマ、テーブルの自動生成について。思った形で生成されていないときに。

#5. Persistence Context
https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#pc
永続性コンテキストについて。保存されない、読み込まれないといったときはここの処理が何かしら間違っているはず。

#####以下随時追加予定…