当前位置: 首页 > 知识库问答 >
问题:

未生成MapStruct一对多关系

长孙宜
2023-03-14
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
@DecoratedWith(MlpConfigMapperDecorator.class)
public interface MlpConfigMapper {

    @Mapping(target = "epochNumber", source = "epochs")
    @Mapping(target = "activationFunction", ignore = true)
    MlpConfig toEntity(CustomMlpConfigRequest mlpConfigDto);
}
public abstract class MlpConfigMapperDecorator implements MlpConfigMapper {

    @Autowired
    @Qualifier("delegate")
    private MlpConfigMapper delegate;

    @Autowired
    private ActivationFunctionService activationFunctionService;

    @Override
    public MlpConfig toEntity(CustomMlpConfigRequest mlpConfigDto) {

        MlpConfig mlpConfig = delegate.toEntity(mlpConfigDto);

        mlpConfig.setActivationFunction(activationFunctionService.findByType(mlpConfigDto.getActivationFunction()));

        return mlpConfig;
    }
}
public class CustomMlpConfigRequest {

    private String name;

    private String description;

    private int batchSize;

    private int epochs;

    private List<LayerDto> layers;

    private String activationFunction;

}
public class LayerDto {

    public String type;
    public int orderNumber;
    public int neuronsNumber;

}
public class MlpConfig {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String name;

    private String description;

    private int batchSize;

    private int epochNumber;

    @JoinColumn(nullable = false, name = "activationFunction_id")
    @ManyToOne(fetch = FetchType.LAZY)
    private ActivationFunction activationFunction;

    @JsonManagedReference
    @Column(nullable = false)
    @OneToMany(mappedBy = "mlpConfig", cascade = CascadeType.ALL)
    private List<Layer> layers;

    @ManyToOne(fetch = FetchType.LAZY)
    private User user;

    private Date lastUpdated;
}
public class Layer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private ELayer type;

    private int neuronsNumber;

    private int orderNumber;

    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    @ManyToOne(fetch = FetchType.LAZY, optional=false)
    @JoinColumn(name = "mlpConfig_id", nullable=false)
    @JsonBackReference
    private MlpConfig mlpConfig;
}

生成的子实体映射器方法(缺少setChildren或setmlpconfig(),在我的例子中):

@Override
public LayerDto layerToDto(Layer layer) {
    if ( layer == null ) {
        return null;
    }

    LayerDto layerDto = new LayerDto();

    if ( layer.getType() != null ) {
        layerDto.setType( layer.getType().name() );
    }
    layerDto.setOrderNumber( layer.getOrderNumber() );
    layerDto.setNeuronsNumber( layer.getNeuronsNumber() );

    return layerDto;
}

如何让映射器在子级中设置父级?

共有1个答案

云京
2023-03-14

您是否有层toEntity(LayerDto LayerDto);

此外,在实体类上的层的setter上,应该是layers.foreach(layer->layer.setmlpconfig(this));

你做了那个设置工作吗?如果不这样做,那么当您尝试获取mplConfig实体时,该实体的层可以始终为null。

 类似资料:
  • 我有一个关于mapstruct中@ManyToOne映射的问题。我有两个表 第一个: 第二个是: 我有一个这样的箱子: 和MemberDto作为实体相同。 我需要使用mapstruct进行如下映射: 我需要填写名单成员;但我不明白怎么做。

  • Mapstruct在Spring-Boot rest api中使用一对多和多对一关系映射我的实体时遇到了一个问题。 我有下面的课 因此,当我在评论中添加私有UserDTO用户时;进入PolicyDTO和公共列表PolicyList;进入UserDTO 结果策略列出了所有字段中的值都可以,当然,除了两个注释字段。如果我用双向关系将这两个字段取消注释到DTO中,结果不仅在关系字段中是null,而且在所

  • 这是项目迁移 这是时间表 这样用户就可以迁移了 这是我的项目模型 这是我的时间表模型: 这是我的用户模型 现在,我从项目返回我的查询 这是可以的,但user_id用户在timesheets.user_id我不能得到它的时间表,并得到它 此控制器按时间表中的项目id返回项目和时间表,但时间表中的用户id我不知道如何将其输入系统

  • 有没有一种方法可以忽略使用mapstruct在此代码示例中第三种方法的映射器的生成?

  • 我编写了所需的带有注释的接口和作为装饰器的抽象类。生成(mvn清理包)后,通过“默认”过程更新修饰的函数,得到的是参数和结果类型。我不知道,有什么问题。你能帮帮我吗? 环境:mapstruct版本1.4.2。lombok最终版本1.18.22(Spring boot 2.6.3)lombok mapstruct绑定:0.2.0 和 Mapper接口声明: 装饰师: } 以及生成的源: