你能告诉我将dto映射到域并返回具有循环的对象的最佳做法是什么?例如,我有这两个对象: 用户对象:
public class User {
private int id;
private String firstname;
private String lastname;
private List<Order> orders;
// ... some other properties and getters and setters
}
和订单对象:
public class Order {
private int id;
private User owner;
}
我应该如何将这些域模型映射到DTO?这是我的映射函数的示例:
public UserDTO userToDto(User user) {
UserDTO dto = new UserDTO();
dto.setIs(user.getId());
dto.setFirstname(user.getFirsname());
dto.setLastname(user.getLastname());
List<OrderDTO> ordersDto = new List<OrderDTO>();
for (Order order : user.getOrders()) {
OrderDTO orderDto = new OrderDTO();
orderDto.setId(order.getId());
orderDto.setUser(...) // what I should I set here?
ordersDto.add(orderDto);
}
dto.setOrders(ordersDto);
return dto;
}
我对 orderDto.setUser(...)功能有疑问。你能告诉我什么是最好的做法吗?当我逐步开始映射User的属性时,我以映射Orders结束,我实际映射,并创建循环。谢谢你的回答。
答案 0 :(得分:0)
首先,我假设你也需要客户端的关系。否则你不会对循环有任何问题。 此外,我假设您同时拥有UserDTO和OrderDTO,其中OrderDTO将UserDTO作为成员(以及UserDTO的OrderDTO列表)。
Imho你只需要设置
orderDTO.setUser(dto); // where dto is the UserDTO created initially.
现在你得到一个循环,你需要在将DTO发送到客户端时处理(例如使用Rest)。在JPA方面,你可能会有@OneToOne(在订单中)和@OneToMany(在用户中)注释。
我建议使用jackson进行JSON处理。如果你这样做,你可以使用
// in UserDTO
@JsonManagedReference
private List<Orders> orders;
// in OrdersDTO
@JsonBackReference
private UserDTO owner;
我希望这有帮助!