微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ModelMapping SpringBoot匹配多个源属性层次结构

如何解决ModelMapping SpringBoot匹配多个源属性层次结构

我在映射实体时遇到问题。 我实际上扩展了我的所有实体,为什么使用此类:

@MappedSuperclass
@Data
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(
        value = {"logcreatedAt","logupdatedAt"},allowGetters = true
)
public abstract class AuditModel implements Serializable {
    
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @Column(name = "log_created_at",nullable = false,updatable = false)
    @CreatedDate
    private Date logCreatedAt = new Date();

    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @Column(name = "log_updated_at",nullable = false)
    @LastModifiedDate
    private Date logUpdatedAt = new Date();
}

我遇到的问题是这个:

1) The destination property com.example.jpa.dto.HistoriqueDeploiementReadingDTO.setLog_updated_at() matches multiple source property hierarchies:

    com.example.jpa.model.AuditModel.getLogUpdatedAt()
    com.example.jpa.model.AuditModel.getLogCreatedAt()
    com.example.jpa.model.HistoriqueDeploiement.getService()/com.example.jpa.model.AuditModel.getLogUpdatedAt()
    com.example.jpa.model.HistoriqueDeploiement.getService()/com.example.jpa.model.AuditModel.getLogCreatedAt()
    com.example.jpa.model.HistoriqueDeploiement.getNamespace()/com.example.jpa.model.AuditModel.getLogUpdatedAt()
    com.example.jpa.model.HistoriqueDeploiement.getNamespace()/com.example.jpa.model.AuditModel.getLogCreatedAt()

我了解映射器有什么问题,但是我没有找到解决方案... 这个堆栈根本对我没有帮助:ModelMapper: matches multiple source property hierarchies

我的映射器:

@Service
@Configuration
@Slf4j
public class MappingHistoriquetoDTO {

    @Autowired
    private HistoriqueDeploiementRepository historiqueDeploiementRepository;
    
    @Autowired
    private modelmapper modelmapper;

    @Bean
    public modelmapper modelmapper() {
       modelmapper modelmapper = new modelmapper();
       return modelmapper;
    }
    
    public List<HistoriqueDeploiementReadingDTO> findAllMapping() {
       return ((List<HistoriqueDeploiement>) historiqueDeploiementRepository
                .findAll())
                .stream()
                .map(this::convertToHistoriqueDeploiementReadingDTO)
                .collect(Collectors.toList());
    }

    private HistoriqueDeploiementReadingDTO convertToHistoriqueDeploiementReadingDTO(HistoriqueDeploiement historiqueDeploiement) { 
        modelmapper.getConfiguration()
                .setMatchingStrategy(MatchingStrategies.LOOSE);
        HistoriqueDeploiementReadingDTO historiqueDeploiementReadingDTO = modelmapper
                .map(historiqueDeploiement,HistoriqueDeploiementReadingDTO.class); 
        log.info("[Mapping] HistoriqueDeploiement -> HistoriqueDeploiementReadingDTO");
        return historiqueDeploiementReadingDTO;
    }
}

我希望映射器从historiquedeploiement实体而不是命名空间或服务获得getLogUpdatedAt()的值。

谢谢!

解决方法

我通过做自己的映射来解决它。 我不再使用modelmapper

public List<CheckConfigDTO> findAllMapping() {
        log.info("[Mapping] CheckConfig -> CheckConfigDTO");
        return ((List<CheckConfig>) checkConfigRepository
                .findAll())
                .stream()
                .map(this::convertToCheckConfigDTO)
                .collect(Collectors.toList());
    }
    

    private CheckConfigDTO convertToCheckConfigDTO(CheckConfig checkConfig) {       
        CheckConfigDTO checkConfigDTO = new CheckConfigDTO();
        checkConfigDTO.setId(checkConfig.getId());
        checkConfigDTO.setNamespace(checkConfig.getNamespace().getNamespace());
        checkConfigDTO.setService(checkConfig.getService().getService());
        checkConfigDTO.setType_verification(checkConfig.getTypeVerification());
        checkConfigDTO.setStatus(checkConfig.getStatus());
        checkConfigDTO.setStatus_complementaire(checkConfig.getStatusComplementaire());
        checkConfigDTO.setDetails(checkConfig.getDetails());
        checkConfigDTO.setAction_by(checkConfig.getActionBy());     
        checkConfigDTO.setLog_created_at(checkConfig.getLogCreatedAt());
        checkConfigDTO.setLog_updated_at(checkConfig.getLogUpdatedAt());        
        return checkConfigDTO;
    } 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。