Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用org.mapstruct framework进行一对多关系映射_Java_Spring_Mapstruct_Bidirectional Relation - Fatal编程技术网

Java 使用org.mapstruct framework进行一对多关系映射

Java 使用org.mapstruct framework进行一对多关系映射,java,spring,mapstruct,bidirectional-relation,Java,Spring,Mapstruct,Bidirectional Relation,如何使用org.mapstruct framework映射一对多关系 DTO类别: @Data public class ScheduledJobDTO { private String jobName; private String jobGroup; private String jobClass; private String cronExpression; private Boolean cronJob; private Long rep

如何使用org.mapstruct framework映射一对多关系

DTO类别:

@Data
public class ScheduledJobDTO {

    private String jobName;
    private String jobGroup;
    private String jobClass;
    private String cronExpression;
    private Boolean cronJob;
    private Long repeatTime;
    private Integer repeatCount;
    private Set<ScheduledJobParamsDTO> paramtersDTOs;

}

@Data
@EqualsAndHashCode
public class ScheduledJobParamsDTO {

    String name;
    String value;
}

现在,上面的映射器正在映射ScheduledJob和ScheduledJobParams,但是ScheduledJobParams具有ScheduledJob的引用


如何将引用ScheduledJob映射到ScheduledJobParams?

您可以通过
@AfterMapping
@MappedTarget
实现这一点。参考文档中对此进行了描述:


但是,我确信,当您从DTO映射回实体时,您不需要填充双向关系(这是我理解为您所指的“域”)。注意:如果处理不当,将此类对象打印或序列化为JSON或XML会抛出
java.lang.StackOverflowerError

您可以通过
@AfterMapping
@MappedTarget
实现这一点。参考文档中对此进行了描述:

但是,我确信,当您从DTO映射回实体时,您不需要填充双向关系(这是我理解为您所指的“域”)。注意:如果处理不当,将此类对象打印或序列化为JSON或XML会抛出
java.lang.StackOverflowerError

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

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "job_name")
    private String jobName;
    @Column(name = "job_group")
    private String jobGroup;
    @Column(name = "job_class")
    private String jobClass;
    @Column(name = "cron_expression")
    private String cronExpression;
    @Column(name = "is_cron_job")
    private Boolean cronJob;
    @Column(name = "repeat_time")
    private Long repeatTime;
    @Column(name = "repeat_count")
    private Integer repeatCount;
    @Column(name = "trigger_start_date")
    private LocalDate triggerStartDate;
    @Column(name = "trigger_end_date")
    private LocalDate triggerEndDate;
    @Column(name = "created_at")
    private LocalDate createdAt;
    @Column(name = "modified_at")
    private LocalDate modifiedAt;
    @Column(name = "is_active")
    private Boolean active;
    @OneToMany(mappedBy = "scheduledJob")
    private Set<ScheduledJobParams> parameters;

}

@Data
@Entity
@Table(name = "scheduled_job_params")
@EqualsAndHashCode
public class ScheduledJobParams {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "scheduled_job_id", nullable = false)
    ScheduledJob scheduledJob;
    String name;
    String value;
}

@Mapping(source = ".", target = ".")
@Mapping(source = "paramtersDTOs", target = "parameters")
ScheduledJob mapToDomain(ScheduledJobDTO scheduledJobDTO);

// Java 8+ otherwise you need to use an abstract class and a for-loop instead
@Mapper(componentModel = "spring")
public interface ScheduledJobMapper {

    @Mapping(target = "parameters", source = "paramtersDTOs")
    ScheduledJob mapToDomain(ScheduledJobDTO dto);

    @AfterMapping
    default void after(@MappingTarget ScheduledJob domain, ScheduledJobDTO dto) {
        domain.getParameters().forEach(scheduledJobParams -> {
            scheduledJobParams.setScheduledJob(domain);
        });
    }
}