我在我的 java spring 應用程式中使用jpa EntityManager 和 hibernate。假設我有一個如下所示的用戶物體:
public class User {
private Long id;
...
@ManyToOne
private Address address
}
我有自定義用戶 dto 物件傳遞給客戶端:
public class UserDTO {
private Long id;
private AddressDTO address;
...
}
我有一個 UserRepository,它用EntityManager和執行普通的 jpql 查詢Query。
注意,我需要自定義 dto,因為我的 dto 有一些物體中不存在的欄位,必須在查詢中計算。現在我的問題是:EntityManager 有沒有辦法將平面查詢結果映射到我嵌套的 UserDTO 中?實際上,我需要在 UserDto 等內部映射 AdressDTO 中的地址結果。
注意:我想使用 jpql 而不是本機 sql 查詢。
uj5u.com熱心網友回復:
你走對了。
您確實需要獲取 User,然后將其轉換為 UserDTO。不要在您的查詢中構建 DTO。
對于這種轉換,您需要 Java Mapper。我更喜歡MapStruct,但有很多這樣的工具(ModelMapper、Dozer 等)。
MapStruct 也足夠智能,可以管理嵌套物件。
uj5u.com熱心網友回復:
您可以直接在 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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/379356.html
上一篇:在可視化基本表單中打開URL
