Skip to content

Commit bfa4a08

Browse files
committed
エンベッダブルクラスのドキュメントを追加
1 parent e25be7f commit bfa4a08

File tree

3 files changed

+159
-0
lines changed

3 files changed

+159
-0
lines changed

docs/sources/embeddable.rst

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
=========================
2+
エンベッダブルクラス
3+
=========================
4+
5+
.. contents:: 目次
6+
:depth: 3
7+
8+
Embeddable(エンベッダブル)は、データベースのテーブルやクエリの結果セット複数カラムをグループ化します。
9+
10+
エンベッダブル定義
11+
=========================
12+
13+
エンベッダブルクラスは ``@Enbeddable`` を注釈して示します。
14+
コンストラクタには永続的なフィールドに対応するパラメータが必要です。
15+
16+
.. code-block:: java
17+
18+
@Embeddalbe
19+
public class Address {
20+
21+
private final String city;
22+
23+
private final String street;
24+
25+
@Column(name = "ZIP_CODE")
26+
private final String zip;
27+
28+
public Address(String city, String street, String zip) {
29+
this.city = city;
30+
this.street = street;
31+
this.zip = zip;
32+
}
33+
}
34+
35+
エンベッダブルクラスは :doc:`../entity` のフィールドとして使用します。
36+
37+
.. code-block:: java
38+
39+
@Entity
40+
public class Employee {
41+
@Id
42+
private final Integer id;
43+
44+
private final Address address;
45+
}
46+
47+
テーブルや結果セットとのマッピングにおいて、上記のクラス定義は下記のクラス定義と同等です。
48+
49+
.. code-block:: java
50+
51+
@Entity
52+
public class Employee {
53+
@Id
54+
private final Integer id;
55+
56+
private final String city;
57+
58+
private final String street;
59+
60+
@Column(name = "ZIP_CODE")
61+
private final String zip;
62+
}
63+
64+
65+
ネーミング規約
66+
---------------------------
67+
68+
ネーミング規約は、エンベッダブルクラスを保有する :doc:`../entity` から引き継ぎます。
69+
70+
フィールド定義
71+
==================
72+
73+
エンベッダブルクラスのフィールドはデフォルトで永続的です。
74+
つまり、テーブルや結果セットのカラムに対応します。
75+
フィールドの型は次のいずれかでなければいけません。
76+
77+
* :doc:`basic`
78+
* :doc:`domain`
79+
* :doc:`basic` または :doc:`domain` のいずれかを要素とするjava.util.Optional
80+
* java.util.OptionalInt
81+
* java.util.OptionalLong
82+
* java.util.OptionalDouble
83+
84+
.. code-block:: java
85+
86+
@Embeddalbe
87+
public class Address {
88+
...
89+
String street;
90+
}
91+
92+
カラム
93+
------------------
94+
95+
カラム情報を指定するには、 ``@Column`` を使用します。
96+
97+
.. code-block:: java
98+
99+
@Column(name = "ZIP_CODE")
100+
private final String zip;
101+
102+
識別子
103+
------
104+
105+
エンベッダブルクラスには識別子(主キー)を定義できません。
106+
107+
バージョン
108+
------------------
109+
110+
エンベッダブルクラスには楽観的排他制御用のバージョンを定義できません。
111+
112+
非永続的なフィールド
113+
--------------------------------
114+
115+
非永続的なフィールドは、``@Transient`` を注釈して示します。
116+
117+
取得時の状態を管理するフィールド
118+
--------------------------------------------
119+
120+
エンベッダブルクラスには取得時の状態を管理するフィールドを定義できません。
121+
122+
メソッド定義
123+
==================
124+
125+
メソッドの定義に制限はありません。
126+
127+
フィールドの可視性を ``protected`` やパッケージプライベートにして ``public`` なメソッド経由で
128+
アクセスすることも、メソッドを一切使用せず ``public`` フィールドに直接アクセスすること
129+
もどちらもサポートされています。
130+
131+
利用例
132+
==================
133+
134+
インスタンス化して利用します。
135+
136+
.. code-block:: java
137+
138+
Employee employee = new Employee(); // エンティティ
139+
Address address = new Address("Tokyo", "Yaesu", "103-0028"); // エンベッダブル
140+
employee.setAddress(address);
141+

docs/sources/entity.rst

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ Entity(エンティティ)は、データベースのテーブルやクエ
121121

122122
* :doc:`basic`
123123
* :doc:`domain`
124+
* :doc:`embeddable`
124125
* :doc:`basic` または :doc:`domain` のいずれかを要素とするjava.util.Optional
125126
* java.util.OptionalInt
126127
* java.util.OptionalLong
@@ -156,6 +157,10 @@ Entity(エンティティ)は、データベースのテーブルやクエ
156157
``@Column`` を使用しない、もしくは ``@Column`` の ``name`` 要素を使用しない場合、
157158
カラム名は `ネーミング規約`_ により解決されます。
158159

160+
.. note::
161+
162+
フィールドの型が :doc:`embeddable` の場合、 ``@Column`` は指定できません。
163+
159164
識別子
160165
------
161166

@@ -176,6 +181,10 @@ Entity(エンティティ)は、データベースのテーブルやクエ
176181
@Id
177182
Integer id2;
178183
184+
.. note::
185+
186+
フィールドの型が :doc:`embeddable` の場合、 ``@Id`` は指定できません。
187+
179188
識別子の自動生成
180189
~~~~~~~~~~~~~~~~
181190

@@ -264,6 +273,10 @@ RDBMSによってはサポートされていません。
264273
@Version
265274
Integer version;
266275
276+
.. note::
277+
278+
フィールドの型が :doc:`embeddable` の場合、 ``@Version`` は指定できません。
279+
267280
非永続的なフィールド
268281
--------------------------------
269282

@@ -292,6 +305,10 @@ RDBMSによってはサポートされていません。
292305
@OriginalStates
293306
Employee originalStates;
294307
308+
.. note::
309+
310+
エンティティクラスのフィールドに :doc:`embeddable` が含まれている場合、 ``@OriginalStates`` は使用できません。
311+
295312
メソッド定義
296313
==================
297314

docs/sources/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ User Documentation
4242
config
4343
basic
4444
domain
45+
embeddable
4546
entity
4647
dao
4748
query/index

0 commit comments

Comments
 (0)