繁体   English   中英

域模型到DTO映射的周期

[英]Cycles in mapping Domain models to DTOs

您能否告诉我,对于具有周期的对象,将dto映射到域并返回的最佳实践是什么? 例如,我有以下两个对象:用户对象:

public class User {
   private int id;
   private String firstname;
   private String lastname;
   private List<Order> orders;
   // ... some other properties and getters and setters
}

和Order对象:

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结束,并创建周期。 感谢您的回答。

首先,我假设您也需要客户端上的关系。 否则,无论如何您都不会遇到周期问题。 此外,我假设您同时具有UserDTO和OrderDTO,其中OrderDTO具有UserDTO作为成员(并且UserDTO是OrderDTO的列表)。

恕我直言,您只需设置

orderDTO.setUser(dto); // where dto is the UserDTO created initially. 

现在,您将获得一个周期,在将DTO发送到客户端时(例如,使用Rest),需要处理该周期。 在JPA方面,您可能具有@OneToOne(按顺序)和@OneToMany(按用户)注释。

我建议杰克逊进行JSON处理。 如果这样做,您可以使用

// in UserDTO
@JsonManagedReference
private List<Orders> orders;

// in OrdersDTO
@JsonBackReference
private UserDTO owner; 

我希望这有帮助!

暂无
暂无

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

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