目次

JHipsterをつかうときの心構え

たとえていうならば、ちょっと故障しているジャンクの中古品を安く仕入れて、自分で修理するみたいな心構えが必要である。

生成されるコードは99.9%大丈夫だが、0.1%を治す必要があるという意味だ。

テーブル名のつけ方や、サロゲートキーを使った設計にするなど、自動生成に親和性の高い設計を心がける必要がある。

JHipster7のインストールの注意点

nodeのインストールはちょっと前のバージョンにする

JHIPSTERは、最新だからnodeも最新で動くというわけではないようだ。

動作確認されたバージョンを使う

nodeは16

jhipsterは7.9.3を使う

ちなみに(2022/11/07の最新を使おうとしたら)どうなるかというと

最新の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に上がっている

https://github.com/jhipster/generator-jhipster/issues/19627

mvnwはgit for bashではなくcmdから動かす

なぜかwindowsでは、クラスが見つからないエラーとなってしまうようだ。

bash for windowsで動かすには、

mvnw.cmd

のほうをつかうと動く

生成したコードをSTSで読み込む

まずはpom.xmlファイルをインポートさせる。

pomファイルの

以下の箇所でJavaのバージョン11が指定されているので、17にしておこう。

<java.version>11</java.version>

複合のユニークキー

JDLからエンティティ生成すると、oneToMany?の指定を行うとliquibaseのchangeLogにユニーク制約が入るが、複合してユニークとしたい場合、今のところ手動で微調整するしかないのか調査中

手順

uniqueConstraintName?の値を複合キーとしたいカラムがあれば、同じにする。

その他の修正が必要なのかわからないが以下のことをやっているユーザがいる

参考URL

https://stackoverflow.com/questions/36943627/how-to-add-unique-constraint-to-an-entity-in-jhipster

JPAの複合キーについての記述

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;
}

考察

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で複合ユニークキーを実現するにはどうするのかのまとめ

src/main/resources/config/liquibase のChangeLog?の修正

例えば、こんな感じにcolumnNamesにカンマ区切りを入れる

<addUniqueConstraint tableName="airplane_model_seat" columnNames="seat_no, model_id_id"/>

関連するJPAアノテーションをEntityに追加する

こんな感じ、

@Table(name = "table_name",
   uniqueConstraints = {@UniqueConstraint(columnNames = {"field_1", "field_2"})})

複合キーになりそうな定義を、ChangeLog?

ux_

の文字列で検索しておいて、その検索結果をみながら、

下記の文字列

@Table(name =

で検索して、修正をしていくといいかもしれない。

フィールド値が一意であることの指定をJPAに対して確認する

@Column(unique=true)
String username; 

フィールド値が一意であることの指定をLiquibaseのChangeLog?に対して行う

<column name="username" type="varchar(255)">
   <constraints nullable="true" unique="true" />
</column>

liquibaseのChangeLog?を修正したらどうなるかの実験

すでにDBのliquibaseが管理しているdatabasechangelogテーブルに、反映したChangeLog?の一覧があるが、それ自体を修正したので削除したい。

dropAllして、updateすればいけるのかどうか。。。

開発初期段階での手順

DBの中身をバックアップとる

スキーマを捨ててsrc/main/resources/config/liquibaseのxmlで再構築する

残しておきたいデータがあればバックアップを取ればいいけど、自分は、

src\main\resources\config\liquibase\fake-data

のディレクトリのCSVを修正している

マスタテーブルの設定方法

データが決まってきたら、文字列の

fake-data

で検索すると修正箇所がでてくるので、fake-dataから、dataフォルダに移してあげましょう。

スキーマーを丸ごと消す(dropする)

./mvnw.cmd liquibase:dropAll -Dliquibase.username=root

これでpomファイルで定義してあるプロジェクトのスキーマがdropされます。

修正したxmlをもとにDBのテーブルを再構築

./mvnw.cmd liquibase:update -Dliquibase.username=root

csvで定義したfake-dataも投入されています。

生成されるfake-dataとChangeLog?の修正

外部キー制約に引っかからないように、fake-dataは、該当のカラムのデータが入らないようになっている。

自分で修正すると、今度はデータを取り込む順序を間違えるとデータが入らないようになってしまう。

以下のファイルに記載してあるテーブルの作成順序を変えてみよう。マスターテーブルのxmlが上に来るようにすると作成順序が変わっていいかもしれない。

src\main\resources\config\liquibase\master.xml

pomファイルのJDBCの依存関係の追加

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でブレークポイントを立てる方法

pomファイルでHikariConfig? class loader のあるところに、mariaDBの依存があることを追記する必要があるようだ。

ApplicationWebXml?.javaと同じフォルダにある、プロジェクト全体を動作させるjavaファイルがあるが、それをデバッグモードでSpring bootとして起動する。

フロント側でブレークポイントを立てる

chromeの開発モードでブレークポイントたてれるのがわかったのですが、

以下のやり方はうまくいかなかった。

次にフロント側は

npm startとすると9000番のポートを使って動作し、そこでの操作がバックエンドに伝わったときに、IDEでブレークポイントで止めることができるのだが、

vscodeで以下のURLを参考に指定をする

https://fintan.jp/page/462/

sourceMapPathOverrides? と webrootの変数の説明

https://qiita.com/beeeyan/items/9b0def365d64d11a4a1c

その他

下記ページのChrome Debugger extention必須は、すでにVSCodeに組み込まれているから不要となっている https://create-react-app.dev/docs/setting-up-your-editor/#visual-studio-code

注意点

.hipsterの下のエンティティでの注意点

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-12-07 (水) 09:32:10 (51d)