如何为#jhipster微服务中的相关实体生成REST API?

时间:2016-06-04 07:48:01

标签: rest jhipster

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

我想知道是否有一个配置允许为所有entites生成Rest API,并且在相同的调用中返回相关的entites?

例如,我有客户实体,该实体与帐户实体具有OneToMany关系。

当我调用 getCustomer 界面时,它只返回来自Customer实体的属性,而不返回链接到Customer的Acccount entites。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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

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

的内容
...
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将允许您级联删除客户到附加到 客户自动!

陷阱我用这种方法找到了:

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

  • 从呼叫休息帐户服务(由...生成的数据)返回的数据 由于上述修复,JHipster)不会包含客户数据。

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

    的结果
    1. 加载客户1然后
    2. 删除客户的帐户记录
    3. 再次访问客户
    4. 异常发生,因为第1步将缓存帐户作为@Cache的结果 所以第3步将尝试再次检索已删除的帐户(记住 渴望装载上面),boooom。

希望这有帮助。