У меня 2 объектов CallRecords и CallRecordOperators с один-ко-многим, как указано нижеMapstruct - Отправить вложенную объект, имеющий (один-ко-многим) в ответ
public class CallRecords {
@Id
@Column(name = "id", unique = true)
private String id;
@Column(columnDefinition = "varchar(255) default ''")
private String callerNumber = "";
@OneToMany(mappedBy="callrecord")
private List<CallRecordOperators> callRecordOperators = new ArrayList<CallRecordOperators>();
//getter setters
}
public class CallRecordOperators {
@Id
@Column(name = "id", length = 50, unique = true, nullable = false, insertable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "callRecordId")
private CallRecords callrecord;
@ManyToOne
@JoinColumn(name = "operatorId")
private Operator operator;
@Formats.DateTime(pattern = "yyyy-MM-dd HH:mm:yy")
@Column(columnDefinition = "TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP")
private Date startTime = new Date();
@Column(columnDefinition = "varchar(100) default ''")
private String dialStatus;
//getter setter
}
Итак, если пользователь запрашивает все данные «CallRecords», я также должен предоставить «CallRecordOperators», поскольку они связаны.
Текущий код Mapper и DTOS
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface CallRecordsMapper {
CallRecordsMapper INSTANCE = Mappers.getMapper(CallRecordsMapper.class);
@Mapping(source="callRecordOperators",target = "operators")
CallRecordsDto callRecordsToCallRecordsDto(CallRecords callRecords);
public abstract CallRecordOperatorsDto toTarget(CallRecordOperators source);
List<CallRecordsDto> callRecordsToCallRecordsDtos(List<CallRecords> callRecords);
}
public class CallRecordsDto {
private String callerNumber;
private List<CallRecordOperatorsDto> operators;
//getter setters
}
public class CallRecordOperatorsDto {
private String callRecordsId;
private String operatorId;
private String operatorName;
private String currentTime;
// getter setter
}
Но выше кода я получаю
{
"callerNumber": "9898989898",
"operators": [{
"callRecordsId": null,
"operatorId": null,
"operatorName": null,
"currentTime": null
}, {
"callRecordsId": null,
"operatorId": null,
"operatorName": null,
"currentTime": null
}]
}
значения массива оператора равны нулю. что он может решить?
Можете ли вы поделиться определения ваших целевых типов (DTO), а? IIUC, вы хотите отобразить свойства одной из записей в 'A # bs' для свойства в DTO для' A'. Какой это «B»? Ваш лучший подход, вероятно, состоит в том, чтобы использовать выражение для выбора правильного значения: '@Mapping (target =" property1 ", expression =" java (bs.get (0) .property1) ")'. – Gunnar
@ Gunnar обновил вопрос с моей фактической сущностью. Мне нужен список второго объекта в моем первом объекте, как показано выше. – silentprogrammer