- 追加された行はこの色です。
- 削除された行はこの色です。
* 目次 [#v6964dfd]
#contents
* JHipsterをつかうときの心構え [#t94ff159]
たとえていうならば、ちょっと故障しているジャンクの中古品を安く仕入れて、自分で修理するみたいな心構えが必要である。
生成されるコードは99.9%大丈夫だが、0.1%を治す必要があるという意味だ。
テーブル名のつけ方や、サロゲートキーを使った設計にするなど、自動生成に親和性の高い設計を心がける必要がある。
* JHipster7のインストールの注意点 [#c21d5157]
インストールはちょっと前のバージョンにする
nodeのインストールはちょっと前のバージョンにする
JHIPSTERは、最新だから動くというわけではないようだ。
JHIPSTERは、最新だからnodeも最新で動くというわけではないようだ。
** 動作確認されたバージョンを使う [#j4822092]
nodeは16
jhipsterは7.9.3を使う
*** ちなみに(2022/11/07の最新を使おうとしたら)どうなるかというと [#c81a3a9b]
最新のバージョンをつかおうとしたら、以下のエラーが出る
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './lib/util/namespace' is not defined by "exports" in C:\Users\sion3\AppData\Roaming\npm\node_modules\generator-jhipster\node_modules\yeoman-environment\package.json
最新のnodeのバージョンをつかおうとしたら、以下のエラーが出る
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './lib/util/namespace' is not defined by "exports" in
C:\Users\sion3\AppData\Roaming\npm\node_modules\generator- jhipster\node_modules\yeoman-environment\package.json
*** この問題はIssueに上がっている [#r84ec873]
https://github.com/jhipster/generator-jhipster/issues/19627
* mvnwはgit for bashではなくcmdから動かす [#xfeb12ec]
なぜかwindowsでは、クラスが見つからないエラーとなってしまうようだ。
bash for windowsで動かすには、
mvnw.cmd
のほうをつかうと動く
* 生成したコードをSTSで読み込む [#i0b3ad7a]
まずはpom.xmlファイルをインポートさせる。
** pomファイルの [#ddfa3564]
以下の箇所でJavaのバージョン11が指定されているので、17にしておこう。
<java.version>11</java.version>
* 複合のユニークキー [#r0df8ab3]
JDLからエンティティ生成すると、oneToManyの指定を行うとliquibaseのchangeLogにユニーク制約が入るが、複合してユニークとしたい場合、今のところ手動で微調整するしかないのか調査中
** 手順 [#kd0f7138]
uniqueConstraintNameの値を複合キーとしたいカラムがあれば、同じにする。
その他の修正が必要なのかわからないが以下のことをやっているユーザがいる
*** 参考URL [#r23827bd]
https://stackoverflow.com/questions/36943627/how-to-add-unique-constraint-to-an-entity-in-jhipster
*** JPAの複合キーについての記述 [#xcc8c4cc]
https://stackoverflow.com/questions/3404853/multiple-unique-constraints-in-jpa
によれば、以下の文法が使えるようだ。ただ、Hibernateが対応してなさげみたいなコメントもあるので留意しよう。
@Entity
@Table(name="person", uniqueConstraints={
@UniqueConstraint(columnNames={"code", "uid"}),
@UniqueConstraint(columnNames={"anotherField", "uid"})
})
public class Person {
// Unique on code and uid
public String code;
public String uid;
// Unique on username
public String username;
public String name;
public String email;
}
** 考察 [#jf824ef1]
1フィールドのユニーク制約は、フィールドレベルだけれども、複合フィールドのユニーク制約は、テーブルレベルの指定だ。
JDLの書式は、
https://www.jhipster.tech/jdl/entities-fields
によれば、
[<entity javadoc>]
[<entity annotation>*]
entity <entity name> [(<table name>)] {
[<field javadoc>]
[<field annotation>*]
<field name> <field type> [<validation>*]
}
なので、もしJDLに記述できるとすれば、
[<entity annotation>*]
の箇所になると思うが、将来的な実装されるといいな、という感じだ。
** JHipsterで複合ユニークキーを実現するにはどうするのかのまとめ [#gd0bd16b]
*** src/main/resources/config/liquibase のChangeLogの修正 [#oa45efa4]
例えば、こんな感じにcolumnNamesにカンマ区切りを入れる
<addUniqueConstraint tableName="airplane_model_seat" columnNames="seat_no, model_id_id"/>
*** 関連するJPAアノテーションをEntityに追加する [#i746bd71]
こんな感じ、
@Table(name = "table_name",
uniqueConstraints = {@UniqueConstraint(columnNames = {"field_1", "field_2"})})
複合キーになりそうな定義を、ChangeLogの
ux_
の文字列で検索しておいて、その検索結果をみながら、
下記の文字列
@Table(name =
で検索して、修正をしていくといいかもしれない。
*** フィールド値が一意であることの指定をJPAに対して確認する [#cd69a5ce]
@Column(unique=true)
String username;
*** フィールド値が一意であることの指定をLiquibaseのChangeLogに対して行う [#r30cd155]
<column name="username" type="varchar(255)">
<constraints nullable="true" unique="true" />
</column>
* liquibaseのChangeLogを修正したらどうなるかの実験 [#rbd8bc45]
すでにDBのliquibaseが管理しているdatabasechangelogテーブルに、反映したChangeLogの一覧があるが、それ自体を修正したので削除したい。
dropAllして、updateすればいけるのかどうか。。。
* 開発初期段階での手順 [#c141180e]
** DBの中身をバックアップとる [#c860f316]
スキーマを捨ててsrc/main/resources/config/liquibaseのxmlで再構築する
残しておきたいデータがあればバックアップを取ればいいけど、自分は、
src\main\resources\config\liquibase\fake-data
のディレクトリのCSVを修正している
*** マスタテーブルの設定方法 [#j5439627]
データが決まってきたら、文字列の
fake-data
で検索すると修正箇所がでてくるので、fake-dataから、dataフォルダに移してあげましょう。
** スキーマーを丸ごと消す(dropする) [#b27fdb73]
./mvnw.cmd liquibase:dropAll -Dliquibase.username=root
これでpomファイルで定義してあるプロジェクトのスキーマがdropされます。
** 修正したxmlをもとにDBのテーブルを再構築 [#v8f45671]
./mvnw.cmd liquibase:update -Dliquibase.username=root
csvで定義したfake-dataも投入されています。
** 生成されるfake-dataとChangeLogの修正 [#j1d0414c]
外部キー制約に引っかからないように、fake-dataは、該当のカラムのデータが入らないようになっている。
自分で修正すると、今度はデータを取り込む順序を間違えるとデータが入らないようになってしまう。
以下のファイルに記載してあるテーブルの作成順序を変えてみよう。マスターテーブルのxmlが上に来るようにすると作成順序が変わっていいかもしれない。
src\main\resources\config\liquibase\master.xml
* pomファイルのJDBCの依存関係の追加 [#caabb142]
HikariCPが依存しているJDBCのdependencyが自動で追加されていないようなので、
以下を参考にして入れてあげる必要があった。
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
* JavaのIDEでブレークポイントを立てる方法 [#naeaf1b9]
pomファイルでHikariConfig class loader
のあるところに、mariaDBの依存があることを追記する必要があるようだ。
ApplicationWebXml.javaと同じフォルダにある、プロジェクト全体を動作させるjavaファイルがあるが、それをデバッグモードでSpring bootとして起動する。
* フロント側でブレークポイントを立てる [#f8da2446]
chromeの開発モードでブレークポイントたてれるのがわかったのですが、
以下のやり方はうまくいかなかった。
次にフロント側は
npm startとすると9000番のポートを使って動作し、そこでの操作がバックエンドに伝わったときに、IDEでブレークポイントで止めることができるのだが、
vscodeで以下のURLを参考に指定をする
https://fintan.jp/page/462/
** sourceMapPathOverrides と webrootの変数の説明 [#a2fcf6c4]
https://qiita.com/beeeyan/items/9b0def365d64d11a4a1c
*** その他 [#l38a9335]
下記ページのChrome Debugger extention必須は、すでにVSCodeに組み込まれているから不要となっている
https://create-react-app.dev/docs/setting-up-your-editor/#visual-studio-code
* 注意点 [#x1ad76bd]
** .hipsterの下のエンティティでの注意点 [#i71a501a]
- idは自動でフィールド名に入るので入れない
- フィールド名はキャメル形式にする