簡體   English   中英

如何將 JQPL 查詢轉換為 DTO?

[英]How to Convert a JQPL Query into a DTO?

我需要知道是否可以將我的 JQPL 查詢結果轉換為 DTO。

查詢結果是一個 Arrays 數組,如 Json:

[
  [
     ModuleID: number,
     ModuleName: string,
     ToolId: number,
     ToolName: string,
     Enabled: boolean
  ],
]

我想轉換成這個 DTO:

public class ModuleDTO {

private Long ModuleID;
private String ModuleName;
private List<ToolsDTO> Tools;

}

public class ToolsDTO {

private Long ToolId;
private String ToolName;
private Boolean Enabled; 

}

您可以看到最后三個是模塊的子模塊,這意味着在搜索中可能存在重復的模塊,但所有子模塊必須在同一個列表中。

這是Blaze-Persistence Entity Views的完美用例。

Blaze-Persitence 是 JPA 之上的查詢構建器,它支持 JPA model 之上的許多高級 DBMS 功能。 我在它上面創建了實體視圖,以便在 JPA 模型和自定義接口定義模型之間輕松映射,例如 Spring 數據投影。 這個想法是您以您喜歡的方式定義您的目標結構,並通過 JPQL 表達式將 map 屬性(getter)定義到實體 model。 由於屬性名稱用作默認映射,因此您通常不需要顯式映射,因為 80% 的用例是擁有作為實體 model 子集的 DTO。

您沒有指定實體 model 所以我將在這里假設一些事情。 映射可能看起來像下面這樣簡單

@EntityView(Module.class)
interface ModuleDTO {
    @IdMapping
    Long getModuleId();
    String getModuleName();
    List<ToolsDTO> getTools();
}

@EntityView(Tools.class)
interface ToolsDTO {
    @IdMapping
    Long getToolId();
    String getToolName();
    Boolean getEnabled();
}

查詢是將實體視圖應用於查詢的問題,最簡單的就是通過 id 進行查詢。

ModuleDTO dto = entityViewManager.find(entityManager, ModuleDTO.class, id);

但是 Spring 數據集成允許您幾乎像 Spring 數據投影一樣使用它: https://persistence.blazebit.com/documentation/entity-view/mandata-features_html/index。

它只會獲取您告訴它獲取的映射

暫無
暫無

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

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