動画で学ぶJHipster (5) （エンティティ生成）

# 参考動画
https://www.youtube.com/watch?v=6lf64CctDAQ

# エンティティの生成
エンティティの自動生成について、
以下は、動画の[テキスト](https://github.com/mraible/jhipster7-demo#generate-entities)に書かれている説明のgoogle翻訳。
JHipsterはいろんなものを生成してくれるようです。

>作成するエンティティごとに、次のものが必要になります。
・データベーステーブル。
・Liquibaseチェンジセット。
・JPAエンティティクラス。
・SpringDataJpaRepositoryインターフェース。
・SpringMVCRestControllerクラス。
・Angularリストコンポーネント、編集コンポーネント、サービス。そして
・コンポーネントごとにいくつかのHTMLページ。

>また、すべてが機能することを確認するための統合テストと、高速に実行されることを確認するためのパフォーマンステストが必要です。理想的な世界では、Angularコードの単体テストと統合テストもあります。

>幸いなことに、JHipsterは、統合テストやパフォーマンステストを含め、このすべてのコードを生成できます。リレーションシップを持つエンティティがある場合は、それらをサポートするために必要なスキーマ（外部キーを使用）と、それらを管理するためのTypeScriptおよびHTMLコードが作成されます。特定のフィールドを要求するように検証を設定し、それらの長さを制御することもできます。

ツールは、コマンドラインツールの [“entity” sub-generator](https://www.jhipster.tech/creating-an-entity/) と、ブラウザベースの[JDL-Studio](https://start.jhipster.tech/jdl-studio/)の２つがある。

> JDL-Studioは、JHipster Domain Language（JDL）を使用してドメインモデルを定義するためのブラウザベースのツールです。

とのこと。JDLという、JHipster 独自のモデル定義言語があるようです。

[JDL-Studio](https://start.jhipster.tech/jdl-studio/)を使うと、エンティティのダイアグラムを表示することができます。

![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/5892c5ec-15de-fef1-c3bf-737ba4847a3f.png)

ちなみに、
今回のサンプルでは、下記の`blog.jdl` を使います。JDL-Studioに下記コードをコピペで張り付けたら、上記の図になります。

```blog.jdl
entity Blog {
  name String required minlength(3)
  handle String required minlength(2)
}

entity Post {
  title String required
  content TextBlob required
  date Instant required
}

entity Tag {
  name String required minlength(2)
}

relationship ManyToOne {
  Blog{user(login)} to User
  Post{blog(name)} to Blog
}

relationship ManyToMany {
  Post{tag(name)} to Tag{post}
}

paginate Post, Tag with infinite-scroll
```

次のコマンドを実行すると、エンティティ、テスト、UIが自動生成されます。

```
jhipster jdl blog.jdl
```

途中で、`src/main/webapp/i18n/en/global.json`を上書きするように聞かれます。
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/467a7374-5ca3-b9b1-76ea-1c5fb8f96cad.png)
__a__を入力し、このファイルも他のファイルも、すべて上書きします。

(「1分も掛からず」なんて動画では言っていましたが、自分の環境ではもう少しかかりました)

#生成したエンティティ（と偽データ）を見てみる。

実行が終了したら、
`mvnw`でアプリケーションを再起動します。

メニューのEntityを見ると、生成されたエンティティ(Blog, Post, Tag)が表示されます。

![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/5f6b0f2e-7099-e0fb-b613-c9a250f2ea63.png)

また、それぞれのエンティティを見てみると、もうすでに勝手にデータが入っています（！）

__Blog__
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/7d778bff-5b90-1ad8-658c-dd315779f035.png)
__Post__
![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/23782951-bece-cb68-32f3-c6701bab32ae.png)
__Tag__
![6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/934479de-d47a-d396-96a4-9d3de6761cb1.png)

これらのデータは、偽データを作成する[faker.js](https://github.com/marak/Faker.js/)を使用して作成しているとのことです。
これは便利ですね。

#各編集画面
ちなみにViewボタン、Editボタン、Deleteボタンを押したら、こんな画面が表示されます。
### View画面
![7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/a858bc95-3c7b-651a-f912-d9cb8ca3746c.png)
### Edit画面
Create画面も同じ画面です。
![8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/827f1d5d-6248-7c6b-3eb6-1b959a2a607d.png)
### Delete
「本当に消していいですか？」的な確認のポップアップがでます。
![9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/bb3e57f5-c861-40c6-960b-3f6252b728e1.png)

# 今回のコード
https://github.com/sayuu-tf/learning_jhipster_3/commit/fe3971fe1e5b7e24e1e8ecae81ed98cedc6d4812