Java 从具有多个实体的映射器中获取实体

Java 从具有多个实体的映射器中获取实体,java,dto,mapstruct,Java,Dto,Mapstruct,假设在数据库Ent1和Ent2中有两个定义对象的实体,以及一个描述二合一的DTO。 带有MapStruct EntitiesDtoMapper的映射器如下所示: @Mapper interface EntitiesDtoMapper{ DTO EntitiesToDto(Ent1 ent1, Ent2 ent2); //It is possible to do this? Ent1 DtoToEnt1(DTO dto); } 我喜欢从DTO中获取Ent1和Ent2,这是

假设在数据库Ent1和Ent2中有两个定义对象的实体,以及一个描述二合一的DTO。
带有MapStruct EntitiesDtoMapper的映射器如下所示:

@Mapper
interface EntitiesDtoMapper{
    DTO EntitiesToDto(Ent1 ent1, Ent2 ent2);
    //It is possible to do this?
    Ent1 DtoToEnt1(DTO dto);
}

我喜欢从DTO中获取Ent1和Ent2,这是可能的吗?

我认为,如果一个DTO没有嵌入,则将其分离为两个实体不是最佳做法。如果是这样,我建议手动将dto映射到两个实体中,因为这是最简单、最快的方法

对谁感兴趣;这是可能的,但要注意实体参数的名称。
这里有一个例子:

@Data @Entity
public class Ent1{
  public Ent1() {}
  String id;
  String name;
}

@Data @Entity
public class Ent2{
  public Ent2() {}
  String id;
  String name;
}

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DTO{
  String id1,id2,name1,name2;
}

@Mapper
public interface EntitiesDtoMapper{  

  EntitiesIcspDtoMapper INSTANCE = Mappers.getMapper(EntitiesDtoMapper.class);

  @Mappings({
    @Mapping(source="ent1.id", target = "id1"),
    @Mapping(source="ent1.name", target = "name1"),
    @Mapping(source="ent2.id", target = "id2"),
    @Mapping(source="ent2.name", target = "name2")
  })
  DTO EntitiesToDto(Ent1 ent1, Ent2 ent2);

  @Mappings({
    @Mapping(source="id1", target = "id"),
    @Mapping(source="name1", target = "name"),
  })
  Ent1 DtoToEnt1(DTO dto);

  @Mappings({
    @Mapping(source="id2", target = "id"),
    @Mapping(source="name2", target = "name"),
  })
  Ent2 DtoToEnt2(DTO dto); 

}

你试过这个吗?如果有这样的映射器,MapStruct会做什么。这个问题是一个很大的模糊问题,因为尝试它会告诉你它是否会工作。我尝试了,但我有一个AbstractMethodError,我忘记了mapstruct处理器,但它正常工作