Группировка ДТО
Нужна помощь с группировкой ДТО. Сейчас, на выходе, я имею такую картину:
По сути, это две записи с пятью параметрами: dayExpenses, defectAge, defectPercentage, fall, weightGain. Данные берутся из трёх таблиц:
attributes
attribute_values
Ответ собирается в отдельном ДТО:
public class PigOptionsDto {
private String classifier;
private String fall;
private String defectPercentage;
private String defectAge;
private String weightGain;
private String dayExpenses;
private String attributeVersion;
private LocalDateTime activeFrom;
}
Данные наполняются в маппере:
public PigOptionsDto classifierAttributesAttValueEntitiesToPigOptionsDto(
AttributeValuesEntity attributeValues) {
ClassifierEntity classifier = new ClassifierEntity();
PigOptionsDto pigOptionsDto = new PigOptionsDto();
pigOptionsDto.setClassifier(String.valueOf(attributeValues.getClassifiers().getName()));
pigOptionsDto.setFall(attributeValues.getValue());
pigOptionsDto.setDefectPercentage(attributeValues.getValue());
pigOptionsDto.setDefectAge(attributeValues.getValue());
pigOptionsDto.setWeightGain(attributeValues.getValue());
pigOptionsDto.setDayExpenses(attributeValues.getValue());
pigOptionsDto.setActiveFrom(attributeValues.getActiveFrom());
return pigOptionsDto;
}
И вопрос таков, что мне в этом маппере написать, чтобы на выходе получалось не так как на первой картинке, а было бы две записи:
- classifier: "0kg - 8kg grupa", fall: "2", defectPercentage: "4", defectAge: "6", weightGain: "8", dayExpenses: "10"
- classifier: "10kg - 50kg grupa", fall: "1", defectPercentage: "3", defectAge: "5", weightGain: "7", dayExpenses: "9"
Как расставить эти параметры по местам? Если предложенной информации недостаточно, напишите, я дополню. Спасибо.
Ответы (1 шт):
Маппер в вашем варианте не поможет.
У вас сигнатура метода должна быть примерно
public PigOptionsDto classifierAttributesAttValueEntitiesToPigOptionsDto(
AttributeValuesEntity[] attributeValues)
classifierAttributesAttValueEntitiesToPigOptionsDto метод должен получить массив значений. А Я так понимаю что вы перебираете массив AttributeValuesEntity[] attributeValues поэлементно и на каждый создаёте отдельныю запись.
Правильно будет пишитать нормально запрос и получайте свои записи PigOptionsDto
из базы готовыми.
SELECT DISTINCT
classifiers.name,
fall_values.value as fall,
defectPercentage_values.value AS defectPercentage,
defectAge_values.value AS defectAge,
weightGain_values.value AS weightGain,
dayExpenses_values.value AS dayExpenses
FROM classifiers
LEFT JOIN attributes AS falls
ON classifiers.id = falls.cls_id
LEFT JOIN attribute_values AS fall_values
ON classifiers.id = fall_values.cls_id
AND fall_values.atr_id = 11
LEFT JOIN attributes AS defectPercentages
ON classifiers.id = defectPercentages.cls_id
LEFT JOIN attribute_values AS defectPercentage_values
ON classifiers.id = defectPercentage_values.cls_id
AND defectPercentage_values.atr_id = 12
LEFT JOIN attributes AS defectAges
ON classifiers.id = defectAges.cls_id
LEFT JOIN attribute_values AS defectAge_values
ON classifiers.id = defectAge_values.cls_id
AND defectAge_values.atr_id = 13
LEFT JOIN attributes AS weightGains
ON classifiers.id = weightGains.cls_id
LEFT JOIN attribute_values AS weightGain_values
ON classifiers.id = weightGain_values.cls_id
AND weightGain_values.atr_id = 14
LEFT JOIN attributes AS dayExpenses
ON classifiers.id = dayExpenses.cls_id
LEFT JOIN attribute_values AS dayExpenses_values
ON classifiers.id = dayExpenses_values.cls_id
AND dayExpenses_values.atr_id = 15



