Как мне сопоставить набор результатов с вложенной структурой объектов?

У меня есть такой набор результатов...

+--------------+--------------+----------+--------+
| 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))
    }
}
Другие вопросы по тегам