По поводу вашего комментария:
How else should I do it? I think what I'm having trouble understading is
this- should I return a list of "A" objects with only minimal data
populated, or would should I create some kind of new object?
В ситуациях, подобных описанной вами (когда возвращается список и пользователь может что-то выбрать из него), я заметил, что пользователь обычно выбирает одну или две записи, чтобы увидеть больше деталей. В этом случае вы в конечном итоге вернули список полностью заполненных объектов.
В этом случае, то, что я делаю, это запасной вариант, чтобы просто выбрать идентификаторы объекта вместо полноценных объектов.
Таким образом, вы можете создать новый класс только с этими данными:
public class C {
private Integer idForA;
private List<Integer> listOfIdsForB = new ArrayList<Integer>();
//...
}
Затем вы пишете свой запрос с помощью внешнего соединения, чтобы вернуть идентификаторы A и B и вернуть результат, подобный следующему:
IDtoRecordA1 | IDtoB1
IDtoRecordA1 | IDtoB2
IDtoRecordA1 | IDtoB3
IDtoRecordA2 | IDtoB1
IDtoRecordA2 | IDtoB3
IDtoRecordA3 | IDtoB1
IDtoRecordA3 | IDtoB2
IDtoRecordA3 | IDtoB3
IDtoRecordA4 | null
На этом этапе атрибут groupBy
тега resultMap
пригодится для преобразования результата в список C
объектов, содержащих это:
C1: IDtoRecordA1, [IDtoB1, IDtoB2, IDtoB3]
C2: IDtoRecordA2, [IDtoB1, IDtoB3]
C3: IDtoRecordA3, [IDtoB1, IDtoB2, IDtoB3]
C4: IDtoRecordA4, []
Это также очень полезно, чтобы избежать N + 1 запросов. Возможно, вы уже делаете это, когда возвращаете объекты A со списком B, но если вы используете отдельные запросы для получения списка (т. Е. Атрибут select
для тега result
), тогда я предлагаю вам взглянуть на " Избегание N + 1 Выбирает разделы в руководстве разработчика iBatis Data Mapper, чтобы свести к минимуму количество запросов, необходимых для возврата данных.
Итог ...
... если вы обрабатываете большой объем данных, то возвращение полностью загруженных объектов только для отображения небольшого объема информации, вероятно, является излишним.
.. с другой стороны, если вы обрабатываете небольшой объем данных , введение другого класса, который обрабатывает идентификаторы, вероятно, усложнит ситуацию, так что вы также можете вернуть полные объекты A и B (но, конечно, избегая N + 1 запросов).