gpt4 book ai didi

java - 如何将 JQPL 查询转换为 DTO?

转载 作者:行者123 更新时间:2023-12-01 16:46:38 24 4
gpt4 key购买 nike

我需要知道是否可以将 JQPL 查询结果转换为 DTO。

查询结果是一个数组的数组,如下 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 模型的许多高级 DBMS 功能。我在其之上创建了实体 View ,以允许在 JPA 模型和自定义接口(interface)定义的模型之间轻松映射,就像类固醇上的 Spring Data Projections 一样。这个想法是,您按照自己喜欢的方式定义目标结构,并通过 JPQL 表达式将属性(getter)映射到实体模型。由于属性名称用作默认映射,因此您通常不需要显式映射,因为 80% 的用例都具有作为实体模型子集的 DTO。

您没有指定实体模型,因此我将在这里假设一些事情。映射可能看起来像下面一样简单

@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();
}

查询是将实体 View 应用于查询,最简单的是通过 id 进行查询。

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

但是 Spring Data 集成允许您像 Spring Data Projections 一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-data-features

它只会获取您告诉它获取的映射

关于java - 如何将 JQPL 查询转换为 DTO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61761175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com