【问题标题】:JHipster - Entity with JDL, Java entity class with unexpected @Column annotationJHipster - 带有 JDL 的实体,带有意外 @Column 注释的 Java 实体类
【发布时间】:2017-11-08 17:38:35
【问题描述】:

我尝试使用以下选项之一创建 JHipster 应用程序:--skip-client。 之后我也禁用了 Liquibase。

然后我创建了一个测试条目,类似于:

entity Test {
    id String,
    hireDate ZonedDateTime
}

我把它放到一个 test.jh 文件中,在终端上执行: jhipster import-jdl test.jh

当我查看应用程序的 Java 源代码时,我发现了一个 Test.java 类,我认为 id 被自动识别为主键:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;

但是hireDate 被注释为:

@Column(name = "hire_date")
private ZonedDateTime hireDate;

这是为什么呢?

我在我的数据库中为这个实体创建了一个视图“Test”,列也是“Id”和“HireDate”。

但是使用自动添加的@Column 注释,列名(例如“hire_date”)在我的视图中不存在。

我能以某种方式解决这个问题吗?我这与 JHipster 生成器有关还是与 Spring Boot 有关?

还有一个问题:

@Size(max = 100)
@Column(name = "jhi_type", length = 100)
private String type;

给 Java 字段命名为“type”似乎没问题,但 JHipster 为 @Column 制作了“jhi_type”

干杯

【问题讨论】:

    标签: jhipster


    【解决方案1】:

    这些是 JHipster 命名约定:snake-case 用于列,camel-case 用于 Java 实体字段。如果你使用过 Liquibase,这会很好用。

    您不能在生成器中配置此行为。

    禁用 liquibase 不会改变您在数据库中创建的视图不遵守 JHipster 命名约定的事实。 JHipster 生成期望列以这种方式命名的代码。您要么遵守这些约定,要么手动修改生成的代码。

    或者,您可以尝试jhispter-db-helper module,但该项目似乎已被放弃。

    【讨论】:

    • 不太确定我是否理解:当我执行 jhipster import-jdl 时,它会尝试使用 Liquibase?如果 Liquibase 没有被禁用(我在 application.yml 中添加了 include:no-liquibase 来禁用它),那么实体 Java 类中的字段名称将与 JDL (hireDate) 中定义的字段名称相同,但也会在 @Column 注释中定义(雇用日期)?因为我禁用了 Liquibase,所以 jhipster import-jdl 不能使用 Liquibase,因此使用 JHipster 命名约定,如您所述?
    【解决方案2】:

    jdl中不需要定义id字段,默认免费获取。

    【讨论】:

      猜你喜欢
      • 2021-10-01
      • 2016-10-06
      • 1970-01-01
      • 2016-10-30
      • 2013-03-08
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多