Skip to main content

JHipsterドメイン言語 (JDL) - オプション

JHipsterでは、エンティティのページングやDTOなどのオプションを指定できます。 JDLでも、エンティティのアノテーションまたは以下の構文で同様の操作が可能です。

entity A {
name String required
}
entity B
entity C

dto A, B with mapstruct

paginate A with infinite-scroll
paginate B with pagination
paginate C with pager // pagerはAngularJSでのみ利用可能

service A with serviceClass
service C with serviceImpl

使用可能なオプションの完全なリストはこちらにあります。

操作方法

オプションには以下の2種類があります。

  • 単項(オプション値なし)
  • 二項(値付き)

エンティティにオプションを適用する方法は以下の3つです。

  • オプション名を使う (dto, readOnly など、例を参照)
  • アノテーションを使う
  • use XYZ形式を使用

混在させると可読性が低下するため推奨されません。

構文

通常の形式は以下の通りです。

<option name> <option entity list>

または

<option name> <option entity list> with <option value>

または

<option name> <option entity list> with <option value> except <option excluded entity list>

または

<option name> <option entity list> except <option excluded entity list>
  • 単項オプションの場合:
    • オプション名とリストが必要です
    • 除外エンティティはexceptキーワードを使用して指定可能です(詳細は下記参照)
  • 二項オプションの場合:
    • withキーワードの前にエンティティリストとオプション値を指定します
    • 除外エンティティは最後にexceptキーワードで指定します

アノテーションの場合:

@<option name>
entity <entity name>

または

@<option name>(<option value>)
  • Javaと同様に、アノテーションは括弧内に値を取ることが可能
    • オプションによって値が必須でない場合もあります

XYZオプションの使用

useオプション形式でエンティティにいくつかのオプションを指定できます。 この形式はJHipster Code 2020で導入され、以下の理由で作成されました。

  • オプション無効化の課題解決(JHipsterでは 'no' に対する複数の表現がある:no, false, none
  • エンティティごとにオプションをグループ化する方法を提案
entity A
entity B
entity C

use serviceClass for * except C
use mapstruct, serviceImpl, infinite-scroll for A, B
use pagination for C
Useオプションの値コメント
mapstructエンティティにDTOを作成するかどうか。エンティティにDTOがありサービスがない場合、'serviceClass'が使用されます
serviceClass
serviceImpl
paginationCassandraを使用するアプリケーションではページングオプションは使用禁止
infinite-scrollCassandraを使用するアプリケーションではページングオプションは使用禁止
elasticsearchsearchEngineオプションが有効になっているアプリケーションが必要
couchbasesearchEngineオプションが有効になっているアプリケーションが必要

各例には以下の3つの形式があります。

  • 標準形式
  • アノテーションベースの形式
  • use形式(該当する場合)

基本の単項の例

標準形式:

entity A

readOnly A

アノテーション形式:

@readOnly
entity A

基本の二項の例

標準形式:

entity A

dto A with mapstruct

アノテーション形式:

@dto(mapstruct)
entity A

useキーワードの使用:

entity A

use mapstruct, serviceImpl, pagination for A

all, * の例

all* はエイリアスです。

標準形式:

entity A
entity B

dto all with mapstruct

アノテーション形式:

@dto(mapstruct)
entity A

@dto(mapstruct)
entity B

useキーワードの使用:

entity A
entity B

use mapstruct, serviceImpl, pagination for *

all, * の除外の例(単項)

標準形式:

entity A
entity B

skipClient * except A

アノテーション形式:

entity A

@skipClient
entity B

useキーワードの使用:

entity A
entity B

use mapstruct, serviceImpl, pagination for * except A

all, * の除外の例(二項)

標準形式:

entity A
entity B

dto all with mapstruct except A

アノテーション形式:

entity A

@dto(mapstruct)
entity B

useキーワードの使用:

entity A
entity B

use mapstruct, serviceImpl, pagination for all except A

カスタム値を持つオプション

entity A
entity B

microservice all with mySuperMS

混在する例

標準形式:

entity A
entity B
entity C

readOnly B, C
dto * with mapstruct except C
service * with serviceClass except C
search A with elasticsearch

アノテーション形式:

@dto(mapstruct)
@search(elasticsearch)
@service(serviceClass)
entity A

@readOnly
@dto(mapstruct)
@service(serviceClass)
entity B

@readOnly
entity C

サービスについて

サービスが指定されていない場合、リポジトリインタフェースを直接呼び出すリソースクラスが作成されます。これは デフォルトで最も簡単なオプションです(A参照)。

service with serviceClass(B参照)は、リポジトリインタフェースを呼び出すサービスクラスをリソースが呼び出す形にします。 service with serviceImpl(C参照)は、リソースクラスが使用するサービスインタフェースを作成します。

インタフェースは、リポジトリインタフェースを呼び出す具象クラスによって実装されます。

複数のリポジトリを使用するビジネスロジックが必要でない限り、サービスは使用せず、CRUDに適した最もシンプルなオプションが推奨されます。 複数のリポジトリを使用する場合、サービスクラスでの使用が適しています。 JHipstersは不要なインターフェイスは好きではありませんが、もし好きならimplを使ったサービスを使いましょう。

entity A
entity B
entity C

// Aにサービスは指定しない
service B with serviceClass
service C with serviceImpl

マイクロサービス関連のオプション

JHipster v3以降、マイクロサービスの作成が可能です。JDLでは、エンティティの生成にいくつかのオプションを指定できます。 マイクロサービスの名前と検索エンジンを指定します。

マイクロサービスの名前を指定する方法:

entity A
entity B
entity C
microservice * with mysuperjhipsterapp except C
microservice C with myotherjhipsterapp
search * with elasticsearch except C

最初のオプションは、エンティティがマイクロサービスで処理されることをJHipsterに伝えるためのもので、2番目はエンティティの検索方法を指定します。

カスタムアノテーション

JDLでは以下のようなカスタムアノテーションが可能です:

@customAnnotation(customValue)
entity A

主な用途はBlueprintで、エンティティやフィールドに対してカスタムオプションが必要になることがあります。 通常のオプション(dto, `

paginationなど)はCLIと同様にJSONで生成されますが、カスタムオプションはJSONのoptions`キーの下に生成されます。

使用可能なオプション

お探しのものが見つからない場合は、アプリケーションのオプションもご確認ください。

エンティティオプション

JDLでサポートされているエンティティオプション:

JDLオプション名(エンティティ)オプションタイプデフォルト値指定可能な値コメント
skipClient単項falseなしクライアントコード生成がスキップされます
skipServer単項falseなしサーバーコード生成がスキップされます
noFluentMethod単項falseなし詳細はこちら
filter単項falseなし詳細はフィルタリングを参照してください。エンティティがフィルタリングされてもサービスがない場合は、'serviceClass' が使用されます。
readOnly単項falseなしエンティティが読み取り専用になります。詳細はこのリリースノートを参照してください。
dto二項nomapstruct, noエンティティにDTOを作成するかどうか。エンティティにDTOがあるがサービスがない場合、'serviceClass' が使用されます
service二項noserviceClass, serviceImpl, no-
paginate二項nopagination, infinite-scroll, noCassandraを使用する場合、ページングは禁止
search二項noelasticsearch, noアプリケーションがsearchEngineオプションを有効にしている必要があります
microservice二項-カスタム値マイクロサービスアプリケーションの内部で宣言されたすべてのエンティティに自動的に追加されます。
angularSuffix二項-カスタム値
clientRootFolder二項-カスタム値

フィールドオプション

JDLでサポートされているフィールドオプション:

JDLオプション名(フィールド)デフォルト値指定可能な値コメント
defaultValue未定義データ型に適した任意の値データベースのカラムにデフォルト値を定義
defaultValueComputed未定義データベース関数データベースレベルでデフォルト値を生成

関連項目

アプリケーションのオプションはこちらにあります。