コード生成で、いけてないコードを生成するのだがテンプレートでどうなっているのか見つけたい。
このページは、そのコード生成を探すまでの自分のメモである。
jhipsterをEverythingというアプリで検索してみる
node_modules\generator-jhipster
というフォルダにテンプレートがありそうな感じがする。
テンプレートの拡張子はejsだ。VS-CODEの拡張を入れておくと、コメントされているかどうかが、見やすくなった。
node_modules\generator-jhipster\generators
*.ejs
entity-server
fields
に格納されており、ループして、各fieldsをとっている
of fields
実際にループは以下のようにされている
<%_ for (const field of fields.filter(field => !field.transient && (embedded || !field.id || !primaryKey.composite))) { _%>
public <%= field.javaFieldType %> get<%= field.fieldInJavaBeanMethod %>() {
return this.<%= field.fieldName %>;
}
JPAの問い合わせ構文はフィールドがキャメル形式であることが必要である。
ちょっと昔は、スネーク形式はアンダーバーを2個付けたらJPAでもつかえるとかしていたらしいけど、かっこわるいから、そのやり方は使えなくなっている。
get<%= field.fieldInJavaBeanMethod %>()
とあるから、 field.fieldInJavaBeanMethod? で取得できそうだ。
あとは、そのキャメル形式のフィールド名の先頭が小文字だったらいいのだがなにかあるのだろうか?
型は、javaFieldType?のようだ
以下で値を詰め替えているようだが、generatorsフォルダ以下では無いようだ
node_modules\generator-jhipster\generators\entity-server\templates\src\main\java\package\service\criteria\EntityCriteria.java.ejs
node_modules\generator-jhipster\utils\multi-step-transform\field.js
if (field.fieldNameAsDatabaseColumn === undefined) {
const fieldNameUnderscored = _.snakeCase(field.fieldName);
const jhiFieldNamePrefix = generator.getColumnName(entityWithConfig.jhiPrefix);
if (isReservedTableName(fieldNameUnderscored, entityWithConfig.prodDatabaseType)) {
if (!jhiFieldNamePrefix) {
generator.warning(
`The field name '${fieldNameUnderscored}' is regarded as a reserved keyword, but you have defined an empty jhiPrefix. This might lead to a non-working application.`
);
field.fieldNameAsDatabaseColumn = fieldNameUnderscored;
} else {
field.fieldNameAsDatabaseColumn =
`${jhiFieldNamePrefix}_${fieldNameUnderscored}`;
}
} else {
field.fieldNameAsDatabaseColumn = fieldNameUnderscored;
}
}
field.columnName = field.fieldNameAsDatabaseColumn;
| fieldのメンバ変数 | 実際の値 |
| fieldのメンバ変数 | |
| id | |
| fieldName | |
| fieldType | |
| mapstructExpression | |
| transient | |
| readonly | |
| autoGenerate | |
| liquibaseAutoIncrement? | |
| jpaGeneratedValue? | |
| autoGenerateByService? | |
| autoGenerateByRepository? | |
| jpaGeneratedValue? | |
| fieldIsEnum? | |
| fieldWithContentType? | |
| fieldTypeBlobContent? | |
| fieldNameAsDatabaseColumn? | |
| columnName | |
| fieldNameAsDatabaseColumn? | |
| fieldInJavaBeanMethod? | |
| fieldValidateRulesPattern? | |
| fieldValidateRulesPatternJava? | |
| fieldValidateRulesPatternAngular? | |
| fieldValidateRulesPatternReact? | |
| fieldValidate | |
| field.fieldValidateRules? | |
| field.unique | |
| generateFakeData? | |
| path | |
| uniqueValue | |
| relationshipsPath | |
| reference | |
| javadoc | |
| fieldNameHumanized? | |
| fieldName | |
| fieldType | |
| fieldNameCapitalized? | |
| fieldName |
どうやって確認しようか。
そうだった
.jipsterフォルダのエンティティのフィールド名にスネーク形式が入ると、
そのまま、スネーク形式でjavaのエンティティ名となってしまい、
JPAのやり方に沿っていないフィールド名となってしまう。
続けるかどうか、確認ダイアログがでてほしい。