繁体   English   中英

jpa entitymanager - map 查询结果到嵌套的 dto 类中

[英]jpa entitymanager - map query result into nested dto classes

我在我的 java Z2A2D595E6ED9A0B234F0627B 应用程序中使用jpa EntityManager 和 hibernate 假设我有一个如下的用户实体:

public class User {
    private Long id;
    ...
    
    @ManyToOne
    private Address address
}

我有自定义用户 dto object 用于传递给客户端:

public class UserDTO {
    private Long id;
    private AddressDTO address;
    ...
}

我有一个 UserRepository 可以使用EntityManagerQuery执行正常的 jpql 查询。

注意,我需要自定义 dto,因为我的 dto 有一些字段在实体中不存在,必须在查询中计算。 现在我的问题是: EntityManager 有没有办法将 map 平面查询结果放入我的嵌套 UserDTO? 事实上,我需要 map 地址结果在 AdressDTO 里面 UserDto 等等。

注意:我想使用 jpql 而不是原生 sql 查询。

您可以直接在 JPQL 中构建 DTO。 这是一个例子。

select new your.package.UserDTO(u.id, a.country, a.city, a.street)
from User u join u.address a
where ...

此类查询返回List<UserDTO>

当然UserDTO必须有适当的构造函数:

public UserDTO(Long id, String country, String city, String street){
   this.id = id;
   this.address = new AddressDTO(country, city, street);
}

你走对了。

您确实需要获取用户,然后将其转换为 UserDTO。 不要在查询中构建 DTO。

对于该转换,您需要 Java 映射器。 我更喜欢MapStruct ,但有很多这样的工具(ModelMapper、Dozer 等)。

MapStruct 也很聪明,可以管理嵌套对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM