簡體   English   中英

如何為#jhipster微服務中的相關實體生成REST API?

[英]How to generate REST API for related entities in #jhipster Microservices?

基本上,我可以通過在Rest資源中創建一個自定義方法來做到這一點,但是,

我想知道是否有一種配置可以允許為所有實體生成Rest API,並在同一調用中返回其相關實體?

例如,我有一個與客戶實體具有OneToMany關系的客戶實體。

當我調用getCustomer接口時,它僅返回來自Customer實體的屬性,而不返回鏈接到Customer的Accent實體。

同樣在從jhipster生成的Mapper中,我可以看到@Mapping為Account實體指定了ignore = true屬性。

是否可以通過僅更改應用程序中的某種配置加載主實體的所有相關實體

JHipster生成具有延遲加載關系的JPA實體,並忽略JSON序列化中的相關對象。

因此,針對您的用例的唯一解決方案是修改生成的代碼。

您可以更改實體中的注釋以關閉某些關系的延遲加載,並更改DTO中的JSON注釋以包含相關對象,或添加一些REST方法或參數來控制何時執行此操作。

最近,我使用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的添加使您可以將刪除客戶的操作自動級聯到與該客戶連接的所有帳戶上!

我發現這種方法的陷阱:

  • 如果您的Account JPA也有一個@ManyToOne到Customer實例變量的映射,請確保在其上添加@JsonIgnore,否則在調用rest來訪問Account數據時,可能會無限次遞歸JSON響應。 為什么? 來自Rest Account的JSON響應將包含Customer數據,該數據隨后將包含Accounts,然后將包含customer,然后將包含...您得到了要點,頁面凍結了;)

  • 由於上述修復,通過調用剩余帳戶服務返回的數據(由JHipster生成的數據)將不包含客戶數據。

  • 如果有的話,最好刪除上面客戶類中帳戶列表中添加的@Cache。 否則,您可能會因為以下原因而期望JpaObjectRetrievalFailureException

    1. 然后加載客戶1
    2. 然后刪除客戶的帳戶記錄
    3. 再次訪問客戶

    發生異常是因為第1步將@@ Cache的結果緩存帳戶,因此第3步將嘗試再次檢索已刪除的帳戶(請記住上面的加載),boooom。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM