【问题标题】:Send a PUT/GET/POST request to JHipster in one single transaction在单个事务中向 JHipster 发送 PUT/GET/POST 请求
【发布时间】:2020-11-02 21:34:38
【问题描述】:

我对 Jhipster 很陌生,对它的一些功能理解有问题。因此这是我的问题。

我有以下两个微服务。 微服务 1 (MS1) 在 Java 中具有以下数据结构:

Lead {
Customer customer;
Deal deal;
}

Customer{
Integer phoneNumber;
etc...
}

Deal{
Integer value;
etc...
}

微服务 2 (MS2) 是 JHipster 生成的数据库。 数据库只有以下 SQL 表:

CUSTOMER
LEAD

当微服务 1 发生变化时,我从 MS1 向 MS2 发送 2 个单独的 PUT 请求。

  • 首先通过 MS2 中的/customer API 更新 CUSTOMER 的请求
  • 如果更新正常,则发送请求以更新 MS2 中的 DEAL /deal API

要成功更新潜在客户,向客户发送 PUT 请求,交易应该都可以。如果更新一个表失败,那么所有的都应该失败。

因此,我想避免发送 2 个单独的请求,以避免出现 CUSTOMER 请求正常而 DEAL 请求因任何原因而失败的情况。 如果可能的话,我想通过一个 API 发送一个事务,例如 /lead 更新这两个表..

在不为 LEAD 创建额外表的情况下实现此目标的最佳方法是什么? 例如,我应该使用 Jhipster 生成的层/服务。 如果可能(但不是必需的),我想避免接触经常重新生成的代码。 (例如,客户、交易)

如果文档已经存在,请也将我引导至文档。它们很难理解,所以我不确定当前是否有专门解决这个问题的。谢谢。

【问题讨论】:

    标签: jhipster


    【解决方案1】:

    这是直接从 CRUD REST API 公开 JPA 实体时的常见问题。 您的持久性模型不必是您的 API 模型。

    如果 2 个实体是相关的并且应该在同一个事务中更新,这意味着它们应该使用一个原子 API 请求进行更新。

    因此,您可以使用 DTO 定义一个新资源,该 DTO 结合您的 2 个实体,由您手动编码的新 API 公开(因此不需要额外的表)。

    当您使用微服务架构时,您可能在 MS1 和 MS2 之间也有类似的情况,此时您无法使用事务,您可能不得不实施补救措施。

    【讨论】:

    • 澄清一下,你的意思是我应该创建一个新的 jhipster 实体,它本身没有字段,但与 Customer 和 Deal 有关系。最终结果是我有一个用于 API 模型的 Lead java 对象、LeadDTO java 对象等。但是如何确保持久性模型不包含这个新创建的 Lead 实体?代码生成后是否有我应该删除的特定文件?
    • 不,我没想过使用jhipster entity,因为它可能会创建比您需要的更多的东西(您不需要持久性)并且删除它们可能容易出错,我只是在想通过实现资源、DTO 和服务来手动实现它。不要过度使用代码生成en.wikipedia.org/wiki/Law_of_the_instrument
    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多