2010-02-24 7 views
0

У меня есть объект Office и объект устройства. У Office есть устройство, а устройство принадлежит офису. Таким образом, получение объекта Office должно заполнять ссылку Office.Device, а объект Device должен иметь объект Office, в котором он находится. Я полагаю, это круговая ссылка.Вопрос о круговых ссылках iBatis

Я хотел бы сделать это в iBATIS, но я не могу понять, как это сделать должным образом.

Это почти так, как будто мне нужна resultMap, где я могу «установить это свойство для объекта, созданного resultMap, который только что назвал меня». Вместо этого заполните это свойство (объект) другим запросом (N + 1, я знаю) или заполним это свойство с помощью набора результатов и этой другой resultMap.

Я не против создания другой resultMap для этого сценария.

Другим вполне приемлемым ответом является то, что iBATIS этого не делает, потому что ваша схема имеет недостатки. Если это так, дайте мне другие варианты.

ответ

0

Если устройству требуется только круговая ссылка на офис, который он существует внутри, и нет сценария, в котором офис может содержать устройство, и это устройство может содержать список дополнительных офисов.

Тогда RowHandler, вероятно, выполнит эту работу. Запросите офис и устройство с помощью карты SQL в обычном порядке и убедитесь, что офис связан с устройством. Затем внутри RowhHandler, связанного с вызовом запроса, заселите ссылку содержащим офисный объект внутри члена устройства, тем самым сделав круговую ссылку и не требуя дополнительных запросов.

0

http://www.javalobby.org/java/forums/t75161.html имеет пример в нижней части, включая результат другой resultMap как свойства. Я никогда не делал этого, но из его примера кажется, что это сработает. Вероятно, у вас будет 4 sql-запроса: 1 для офиса и связанный с ним, который вытаскивает связанное устройство, а затем соответствующий запрос устройства с адресом, который вытаскивает соответствующий офис. Надеюсь это поможет.