KODO: comment mettre en place un plan pour chercher des relations bidirectionnelles?

StackOverflow https://stackoverflow.com/questions/2641239

  •  27-09-2019
  •  | 
  •  

Question

L'exécution KODO 4.2 et ayant un numéro de requêtes inefficaces généré par KODO. Cela se produit lors de la récupération d'un objet qui contient une collection où cette collection a un dos de relation bidrectional au premier objet.

Class Classroom
{
     List<Student> _students; 
}

Class Student
{
     Classroom _classroom;
}

Si nous créons un plan de récupération à obtenir une liste des salles de cours et leurs étudiants en mettant en place le plan suivant correspondant chercher:

fetchPlan.addField (Classroom.class, » _ étudiants »);

Cela se traduira par deux requêtes (obtenir les salles de classe et obtenir tous les étudiants qui se trouvent dans les salles de classe), ce qui est ce que nous attendons.

Cependant, si l'on inclut l'arrière de référence à la salle de classe dans notre plan chercher pour que le champ _classroom pour obtenir peuplé en faisant fetchPlan.addField (Student.class, « _classroom »), cela se traduira par nombre X de plus requêtes où X est le nombre d'élèves dans chaque classe.

Quelqu'un peut-il expliquer comment résoudre ce problème? KODO a déjà les objets de classe d'origine au point qu'il est l'exécution des requêtes pour récupérer les objets de classe et les mettre dans chaque champ de _classroom de l'objet étudiant. Donc, je me attends KODO simplement mettre ces objets dans le champ de _classroom sur chaque objet de l'étudiant en conséquence et ne pas revenir à la base de données.

Encore une fois, la documentation fait cruellement défaut, mais de ce que je l'ai lu devrait être en mesure de le faire plus efficacement.

Note-- EAGER_FETCH.PARALLEL est activée et je l'ai essayé avec la mise en cache (cache de requêtes et de données) sous tension et hors tension et il n'y a pas de différence dans les requêtes résultantes.

Était-ce utile?

La solution

A travaillé avec le support d'Oracle sur ce this-- est un défaut Kodo 4.2 (la dernière version). Fix est de prendre attribut default-fetch-groupe COMPLETEMENT (Dont vient de mettre à vrai ou faux) à partir du fichier de métadonnées JDO pour les champs qui se trouvent sur l'un-à-un côté de la relation bidirectionnelle. Ainsi, dans l'exemple ci-dessus, vous sortirais l'attribut default-fetch-groupe pour le champ Student._classroom.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top