* 目次 [#v6964dfd] #contents * JHipster7のインストールの注意点 [#c21d5157] nodeのインストールはちょっと前のバージョンにする 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 *** この問題は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"})}) *** フィールド値が一意であることの指定を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