2010-02-24 14 views
0

J'ai un objet Office et un objet Device. Un bureau a un périphérique et un périphérique appartient à un bureau. Ainsi, l'obtention d'un objet Office devrait remplir la référence Office.Device et un objet Device devrait avoir un objet Office auquel il appartient. C'est une référence circulaire, je suppose.Question de références circulaires iBatis

Je voudrais faire cela dans iBATIS, mais je n'arrive pas à comprendre comment le faire correctement. C'est presque comme si j'avais besoin d'un resultMap où je peux "mettre cette propriété à l'objet créé par le resultMap qui vient de m'appeler". Plutôt que de remplir cette propriété (objet) avec une autre requête (N + 1, je sais) ou de remplir cette propriété en utilisant le resultset et cet autre resultMap.

Cela ne me dérange pas de créer un autre resultMap pour ce scénario.

Une autre réponse parfaitement acceptable est qu'iBATIS ne le fait pas parce que votre schéma est défectueux. Si c'est le cas, donnez-moi d'autres options.

Répondre

0

Si le périphérique doit seulement avoir une référence circulaire à Office dans laquelle il existe et qu'il n'existe aucun scénario dans lequel un bureau peut contenir un périphérique et que ce périphérique peut contenir une liste de bureaux supplémentaires.

Ensuite, un RowHandler ferait probablement le travail. Interrogez le bureau et le périphérique via la mappe SQL de la manière habituelle et satisfait le bureau à la relation de périphérique. Ensuite, à l'intérieur du RowhHandler associé à l'appel de requête, remplissez une référence à l'objet Office contenant dans un membre du périphérique, ce qui rend la référence circulaire et ne nécessitant aucune requête supplémentaire.

0

http://www.javalobby.org/java/forums/t75161.html a un exemple vers le bas d'inclure le résultat d'un autre resultMap en tant que propriété. Je n'ai jamais fait ça, mais d'après son exemple, il semble que ça marcherait. Vous auriez probablement des requêtes de 4 sql: 1 pour le bureau et un connexe qui tire le périphérique associé, puis la requête de périphérique correspondant avec un qui tire le bureau associé. J'espère que cela t'aides.