JHipster JDL : how to link entities (by ID) among microservices?

标签 jhipster jdl

我正在运行最新的JHipster生成器

izio@1z10:~$ jhipster --version
Using JHipster version installed globally
5.3.4

我正在通过运行使用以下JDL

jhipster import-jdl jhipster-jdl.jh

生成我的微服务和网关项目。

application {
  config {
    baseName Gateway
    applicationType gateway
    packageName com.app.gateway
    databaseType postgresql
    devDatabaseType postgresql
    prodDatabaseType postgresql
    serverPort 8080
    languages [en,it,de,fr,es,pt-pt]
    serviceDiscoveryType eureka
  }
  entities *
}
application {
  config {
    baseName authorMS
    applicationType microservice
    packageName com.app.ams
    databaseType postgresql
    devDatabaseType postgresql
    prodDatabaseType postgresql
    serverPort 8081
    serviceDiscoveryType eureka
  }
  entities Author
}

application {
  config {
    baseName bookMS
    applicationType microservice
    packageName com.app.bms
    databaseType postgresql
    devDatabaseType postgresql
    prodDatabaseType postgresql
    serverPort 8082
    serviceDiscoveryType eureka
  }
  entities Book
}

entity Author{
    Name String required
}
entity Book{
    Name String required
}

relationship ManyToMany{
    Book{authors(name)} to Author
}

dto * with mapstruct
service * with serviceImpl
paginate * with pagination

microservice Author with authorMS
microservice Book with bookMS

一切似乎都很好,至少在生成部分是这样,因为 jhipster import-jdl 命令没有错误。 这里的问题是我需要一种方法通过实体的 ID 在不同的微服务之间链接实体。 现在,与其他实体类的链接是错误的(即使它驻留在不同的微服务中)。显然,由于缺少实体类,这会导致应用程序无法运行。

在这种情况下,唯一合乎逻辑的解决方案是使用 ID 而不是实体类来链接不同微服务之间的实体。

有什么方法可以从 JDL 中执行此操作,而不是手动进行所需的更改?

最佳答案

你是对的,指定来自不同微服务的实体之间的关系不起作用,我认为 JDL 解析器应该在这种情况下引发错误(请随意在 github 上报告问题),我没有尝试,但我认为实体子生成器不允许这样做。因此,您可以在实体中定义简单的 id 字段,但它不会是一种关系,因为它不允许您轻松地在数据库中构建 JOIN 查询,因为每个实体驻留在不同的数据库中,并且 JHipster 不会为其生成前端代码也是。

我还建议您重新考虑如何在微服务之间划分业务领域。 构建这种关系是微服务架构中的反模式,每个微服务都应该围绕有界上下文进行定义(有关详细信息,请参阅领域驱动设计)。如果两个实体有很强的关系,通常意味着它们应该属于同一个微服务。可能存在异常(exception)情况,但与一个微服务中的 JOIN 数据库查询相比,使用服务间调用来联接实体非常昂贵且脆弱,因此您应该避免使用它们。

关于JHipster JDL : how to link entities (by ID) among microservices?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52461632/

相关文章:

java - JHipster JDL 未生成任何内容,因为必须传递数据库类型

jhipster - 如何在 JHipster 中禁用新用户电子邮件激活?

java.lang.NoClassDefFoundError : org/springframework/beans/factory/config/EmbeddedValueResolver

java - 如何在 Jhipster 生成的应用程序上从 AbstractAuditingEntity 扩展实体?

java - 在 jhipster java 中使用 JDL 更改数据库结构

java - 预定义表 USER 和我自己的表之间的 JHipster 关系

javascript - JHipster:在同一 View 中显示2个实体

angular - 在具有多个模块(如 JHipster)的项目中嵌套 Angular 组件

java - jhipster jdl 与微服务导入