Frage

Beim Laufen KODO 4.2 und mit einem Problem ineffiziente Abfragen von KODO erzeugt wird. Dies geschieht, wenn ein Objekt, das eine Sammlung Abrufen enthält, wo die Sammlung eine Bidrectional Beziehung zurück zum ersten Objekt hat.

Class Classroom
{
     List<Student> _students; 
}

Class Student
{
     Classroom _classroom;
}

Wenn wir erstellen einen Abrufplan eine Liste von Vorlesungs- und ihre entsprechenden Schüler zu erhalten, indem die folgenden Abrufplan einrichten:

fetchPlan.addField (Classroom.class,“_ Studenten“);

Dieses in zwei Abfragen führen wird (die Klassenzimmer und dann alle Schüler erhalten, die in diesen Klassen sind), das ist das, was wir erwarten würden.

Wenn wir jedoch den Verweis zurück in die Klassenzimmer in unserem holt Plan, um für das _classroom Feld umfassen bevölkert werden von fetchPlan.addField tun (Student.class „_classroom“), wird dies in X Anzahl zusätzlicher führen Abfragen, wobei X die Anzahl der Schüler in jedem Klassenzimmer.

Kann mir jemand erklären, wie man dieses Problem beheben? KODO hat bereits die ursprüngliche Klassenzimmer an der Stelle wendet ein, dass es die Abfragen ist die Ausführung der Klassenobjekte und setzen Sie sie in den einzelnen Schüler-Objekts _classroom Feld abzurufen. Also ich würde KODO erwarten einfach die Objekte im _classroom Feld auf den einzelnen Schüler Objekt entsprechend eingestellt und nicht in die Datenbank zurück.

Wieder einmal wird die Dokumentation schmerzlich vermisst, aber von dem, was ich gelesen habe, sollte es in der Lage sein, diese effizienter zu machen.

HINWEIS-- EAGER_FETCH.PARALLEL eingeschaltet ist, und ich habe versucht, dies mit Caching (Abfrage und Datencaches) ein- und ausgeschaltet wird, und es gibt keinen Unterschied in den resultierenden Abfragen.

War es hilfreich?

Lösung

Arbeitete mit Oracle Support auf this-- dies ist ein Defekt in Kodo 4.2 (die neueste Version). Fix ist Attribut default-Fetch-Gruppe VOLLSTÄNDIG nehmen (gerade nicht auf true oder false gesetzt) ??von der JDO-Metadatendatei für die Felder, die auf der einen zu einer Seite des bidirektionalen Beziehung sind. So in dem obigen Beispiel würden Sie das Standard-Fetch-Gruppenattribut für die Student._classroom Feld herausnehmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top