将域模型映射到DTO的周期

时间:2017-11-19 14:19:39

标签: java persistence dto

你能告诉我将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结束,我实际映射,并创建循环。谢谢你的回答。

1 个答案:

答案 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; 

我希望这有帮助!