Domanda

Esecuzione KODO 4.2 e avere un problema di query inefficienti generato da KODO. Ciò accade quando va a prendere un oggetto che contiene una collezione dove tale raccolta ha un back rapporto bidrectional al primo oggetto.

Class Classroom
{
     List<Student> _students; 
}

Class Student
{
     Classroom _classroom;
}

Se creiamo un piano di recupero per ottenere un elenco delle aule e dei loro studenti corrispondenti impostando il seguente piano di recupero:

fetchPlan.addField (Classroom.class,”_ gli studenti”);

Questo si tradurrà in due query (ottenere le aule e quindi ottenere tutti gli studenti che si trovano in quelle aule), che è quello che ci si aspetterebbe.

Tuttavia, se consideriamo anche la parte posteriore di riferimento alla classe nel nostro piano di recupero in modo che il campo _classroom per ottenere popolato da fare fetchPlan.addField (Student.class, “_classroom”), questo si tradurrà in un numero X di ulteriore query dove X è il numero di studenti in ogni classe.

Qualcuno può spiegare come risolvere questo problema? KODO ha già oggetti l'originale aula al punto che sta eseguendo le query per recuperare gli oggetti di classe e metterli in campo _classroom di ciascun oggetto Student. Quindi mi aspetto KODO per impostare semplicemente quegli oggetti nel campo _classroom su ogni oggetto Studente di conseguenza e non tornare al database.

Ancora una volta, la documentazione è gravemente carente, ma da quello che ho letto che dovrebbe essere in grado di farlo in modo più efficiente.

Note-- EAGER_FETCH.PARALLEL sia accesa e ho provato questo con caching (query e dati cache) acceso e spento e non v'è alcuna differenza nelle query risultanti.

È stato utile?

Soluzione

Ha lavorato con Oracle supporto per questo-- questo è un difetto nella Kodo 4.2 (la versione più recente). Fix è quello di prendere l'attributo default-fetch-gruppo COMPLETAMENTE (Non è sufficiente impostare a true o false) dal file JDO metadati per i campi che si trovano sul lato uno-a-uno del rapporto bidirezionale. Così, nell'esempio di cui sopra, si dovrebbe togliere l'attributo default-fetch-gruppo per il campo Student._classroom.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top