Как мне сопоставить набор результатов с вложенной структурой объектов?
У меня есть такой набор результатов...
+--------------+--------------+----------+--------+
| LocationCode | MaterialCode | ItemCode | Vendor |
+--------------+--------------+----------+--------+
| 1 | 11 | 111 | 1111 |
| 1 | 11 | 111 | 1112 |
| 1 | 11 | 112 | 1121 |
| 1 | 12 | 121 | 1211 |
+--------------+--------------+----------+--------+
И так далее для LocationCode 2,3,4 и т. Д. Мне нужен объект (который, в конце концов, будет преобразован в json) как: List<Location>
Где иерархия вложенных объектов в Location Class.
Location.class
LocationCode
List<Material>
Material.class
MaterialCode
List<Item>
Item.class
ItemCode
Vendor
Это соответствует результирующему набору, где 1 местоположение имеет 2 материала, 1 материал (11) имеет 2 позиции, 1 позиция (111) имеет 2 поставщиков.
Как мне этого добиться? я использовалAliasToBeanResultTransformer
раньше, но я сомневаюсь, что это поможет в этом случае.
1 ответ
Решение
Я не думаю, что есть хороший способ сделать это отображение. Я бы просто сделал это с помощью вложенных циклов и пользовательской логики, чтобы решить, когда и когда начинать строить следующее местоположение, материал, элемент и т. Д.
Примерно такой псевдокод:
while (row = resultSet.next()) {
if (row.locationCode != currentLocation.locationCode) {
currentLocation = new Location(row.locationCode)
list.add(currentLocation)
currentMaterial = null
} else if (currentMaterial == null ||
row.materialCode != currentMaterial.materialCode) {
currentMaterial = new Material(row.materialCode)
currentLocation.add(currentMaterial)
} else {
currentMaterial.add(new Item(row.itemCode, row.vendorCode))
}
}