【问题标题】:How to generate REST API for related entities in #jhipster Microservices?如何为#jhipster 微服务中的相关实体生成 REST API?
【发布时间】:2016-06-04 07:48:01
【问题描述】:

基本上我可以通过在 Rest 资源中创建自定义方法来做到这一点,但是,

我想知道是否有一种配置可以允许为所有实体生成 Rest API,并在同一个调用中返回它们的相关实体?

例如,我有一个 Customer 实体,它与 Account 实体具有 OneToMany 关系。

当我调用 getCustomer 接口时,它只返回来自客户实体的属性,而不是链接到客户的帐户实体。

同样在 jhipster 生成的 Mapper 中,我可以看到 @Mapping 为 Account 实体指定了 ignore=true 属性。

是否可以通过更改应用程序中的某种配置来加载主实体的所有相关实体

【问题讨论】:

    标签: rest jhipster


    【解决方案1】:

    我最近在使用 JHipster 3.x 时遇到了类似的问题。

    我所做的简单修复只是将 fetch=FetchType.EAGER(这实际上会修复 LazyInitializationException)添加到 @OneToMany 注释,即 在你的情况下,客户类应该有类似

    ...
    public class Customer implements Serializable {
    
        ...
    
        @OneToMany(mappedBy = "customer" )
        private Set<Account> accounts = new Set<Account>();
    
        ...
    
    }
    

    将 @OneToMany 更改为

    @OneToMany(mappedBy = "customer", fetch=FetchType.EAGER, cascade=CascadeType.REMOVE )
    private List<Account> accounts = new ArrayList<Account>();
    

    请注意,添加 cascade=CascadeType.REMOVE 将允许您将客户级联删除到附加到 客户自动!

    我发现这种方法的缺陷:

    • 如果您的 Account JPA 还具有到 Customer 的 @ManyToOne 映射 实例变量,请确保将 @JsonIgnore 添加到它,否则无限 调用 rest 访问时可能会发生 JSON 响应的递归 帐户数据。为什么?来自 rest Account 的 JSON 响应将包含 然后将包含帐户的客户数据,然后 包含客户,然后将包含...您明白了,页面冻结了;)

    • 调用rest Account服务返回的数据(由 由于上述修复,JHipster) 将不包含客户数据。

    • 如果有的话,最好删除上面客户类的帐户列表中添加的@Cache。否则你可以期待 JpaObjectRetrievalFailureException 是

      的结果
      1. 然后首先加载客户
      2. 然后删除客户的帐户记录
      3. 再次访问客户

      发生异常,因为第 1 步将缓存帐户作为 @Cache 的结果 所以第 3 步将尝试再次检索已删除的帐户(请记住 上面急切加载),boooom。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      JHipster 生成具有延迟加载关系的 JPA 实体,并忽略 JSON 序列化中的相关对象。

      因此,您的用例的唯一解决方案是修改生成的代码。

      您可以更改实体中的注释以关闭某些关系的延迟加载,并更改 DTO 中的 JSON 注释以包含相关对象或添加一些 REST 方法或参数来控制何时执行此操作。

      【讨论】:

        猜你喜欢
        • 2018-01-02
        • 2019-06-07
        • 1970-01-01
        • 2020-04-21
        • 1970-01-01
        • 1970-01-01
        • 2018-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多