Вопрос циркулярных ссылок iBatis - PullRequest
0 голосов
/ 25 февраля 2010

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 04 марта 2010

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

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

0 голосов
/ 26 февраля 2010

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

...