我在映射实体时遇到问题。 我实际上扩展了我的所有实体,为什么使用此类:
@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()的值。
谢谢!
答案 0 :(得分:0)
我通过做自己的映射来解决它。 我不再使用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;
}