JHipsterドメイン言語(JDL) - リレーションシップ
概要
リレーションシップの種類
キーワードrelationship
の後に記述されます。
次の4つのリレーションシップタイプがあります。
OneToOne
OneToMany
ManyToOne
ManyToMany
リレーションシップについてと何を達成できるかについてもっと知りたい場合は 専用ページを参照ください。
名前を複数形にすることに関する注意:JHipsterはそれらを処理するので、リレーションシップの中で処理する必要はありません。
リレーションシップのメソッド
元のエンティティと先のエンティティの後に記述され、with
キーワードとともに使用されます。
サポートされているメソッドは以下です。
-
Authority
:宛先エンティティがUser
やbuiltInEntity
のような組み込みエンティティである場合に必要です -
builtInEntity
: required when the destination entity is a built in entity likeUser
andAuthority
複数のリレーションシップのボディ
JDLファイルに同じタイプの n 個のリレーションシップがあることにうんざりしている場合でも、心配する必要はありません。解決策はあります。
例えば、次のJDLサンプルを見てください。
relationship OneToOne {
A to B
}
relationship OneToOne {
B to C
}
relationship OneToOne {
C to D
}
relationship OneToOne {
D to A
}
解決策として、次のように、リレーションシップ宣言内にすべてのリレーションシップ本体を含めることができます。
relationship OneToOne {
A to B,
B to C,
C to D,
D to A
}
この構文は、次の場合に非常に役立ちます。
-
同じタイプのリレーションシップをたくさん持っている場合
-
どのようなリレーションシップがあるかを知りたい場合
-
JDLファイルでそれらを探すために時間を無駄にしたくない場合
-
You have lots of relationships of the same type,
-
You want to know what the relationships are,
-
You don't want to waste time looking for them in your JDL file(s)
構文
リレーションシップの宣言は次のように行われます。
relationship (OneToMany | ManyToOne | OneToOne | ManyToMany) {
@<option>("<option value>")+ <from entity>[{<relationship name>[(<display field>)]}] to @<option>("<option value>")+ <to entity>[{<relationship name>[(<display field>)]}]+
}
(OneToMany | ManyToOne| OneToOne | ManyToMany)
はリレーションシップのタイプです。<option>
は次の値の1つを指定します:Id | OnDelete | OnUpdate
。これをリレーションシップの正しい側に置くようにしてください。最初の文字の大文字と小文字は区別されません(jdlのエクスポート時は大文字が生成されます)。<option value>
はオプションに適合する値の1つを指定します。NO ACTION | RESTRICT | CASCADE | SET NULL | SET DEFAULT
<from entity>
は、リレーションシップのエンティティの所有者の名前です:いわゆる「元」です。<to entity>
は、リレーションシップの先となるエンティティの名前です:いわゆる「先」です。<relationship name>
は、もう一方の端をタイプとするフィールドの名前です。<display field>
は、選択ボックスに表示されるフィールドの名前です(デフォルト:id
)。required
注入されたフィールドが必須かどうか。with builtInEntity
は、関係の宛先が組み込みエンティティーかどうか。- 複数 のリレーションシップ主体を持つことができます。
- 詳細については、複数のリレーションシップのボディセクションを参照してください。
例
基本の例
relationship OneToOne {
A to B
}
この例は以下の例と同じです。
relationship OneToOne {
A{b} to B{a}
}
注入されたフィールドを指定しないことで、短い形式で双方向のリレーションシップを持たせます。
別の例です。
relationship OneToOne {
A{b} to B
}
これにより、単一方向のリレーションシップが生成されます。エンティティBはエンティティAを介してのみ探索できますが、エンティティAはエンティティBを介して探索できません。
注入フィールド
relationship ManyToMany {
A{b} to B{a}
}
これは双方向のリレーションシップです。つまり、両方のエンティティがもう一方のエンティティの「インスタンス」を持って 生成されます。
メソッド
relationship OneToOne {
A to User with builtInEntity
}