如何将由其他对象组成的对象与 Orika 匹配

How to match an object consisting of other objects with Orika

我有三个 类 的实体 (order,customer,sallers) 和三个 类 的 Dto。我需要使用 Orika 将对象从实体 类 映射到 Dto。其中一个(订单)由数据和指向另一个 Dto 对象的链接组成。我如何使用 orika 将订单实体映射到 orderDto 在 orika 中使用 mapperFactory 或不同的视线映射器。目前我有两个 mapperFactory 用于将 Sellers 和 Customers 转移到 Dto 也许我可以使用它们吗?

类 实体

(隐藏不重要的信息)

订单

@Entity
@Table(name="Orders")
@Data
public class Orders {

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "seller_id", nullable = false)
    private Sellers seller;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "customer_id", nullable = false)
    private Customers customer;  
}

客户

    public class Customers {
        @OneToMany(fetch = FetchType.LAZY, mappedBy = "order_id")
        @JsonIgnoreProperties
        private Set<Orders> orders; 
}

卖家

public class Sellers{
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "order_id")
    private Set<Orders> orders;}

DTO

OrdersDto

public class OrdersDto
    {
        private SellersDto seller;
        private CustomersDto customer;
    }

在我的例子中,我使用了这个解决方案:

您需要更改 DTO class。只需将继承链接从 dto 更改为 Entity。

 public class OrdersDto
    {
        private  Sellers seller // old: SellersDto seller;
        private  Customers customer;  // old: CustomersDto customer;
    }

您实体中的字段名称和 dto class 的名称应该相等。对于数据库上的正确链接,请使用@JoinColumn 和@Column。当你使用:

 mapperFactory.classMap(OrdersDto.class, Orders.class).byDefault().register();

您的内部 classes(例如,对我而言,Sellers 和 Buyers)由字段自动呈现,因为它们的字段也“默认”呈现。