[英]How to map sql native query result into DTO in spring jpa repository?
[英]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 可以使用EntityManager
和Query
执行正常的 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.