Pergunta

Executando o Kodo 4.2 e com um problema de consultas ineficientes sendo geradas pelo Kodo. Isso acontece ao buscar um objeto que contém uma coleção em que essa coleção tenha um relacionamento bidrecional de volta ao primeiro objeto.

Class Classroom
{
     List<Student> _students; 
}

Class Student
{
     Classroom _classroom;
}

Se criarmos um plano de busca para obter uma lista de salas de aula e seus alunos correspondentes, configurando o seguinte plano de busca:

fetchplan.addfield (sala de aula.class, "_ estudantes");

Isso resultará em duas consultas (obtenha as salas de aula e, em seguida, obtenha todos os alunos que estão nessas salas de aula), que é o que esperaríamos.

No entanto, se incluirmos a referência de volta à sala de aula em nosso plano de busca para que o campo da sala de classa seja preenchido fazendo FetchPlan.addfield (Student.class, “_classroom”), isso resultará em x número de consultas adicionais em que x é o número de estudantes em cada sala de aula.

Alguém pode explicar como consertar isso? O Kodo já possui os objetos originais da sala de aula no momento em que está executando as consultas para recuperar os objetos da sala de aula e defini -los no campo de sala de classe de cada objeto de cada aluno. Por isso, eu esperaria que o Kodo simplesmente definisse esses objetos no campo _Classroom em cada objeto de aluno de acordo e não voltasse ao banco de dados.

Mais uma vez, a documentação está faltando, mas pelo que li, deve ser capaz de fazer isso com mais eficiência.

NOTA- Aumer_fetch.parallel está ligado e eu tentei isso com cache (consulta e caches de dados) ligado e desligado e não há diferença nas consultas resultantes.

Foi útil?

Solução

Trabalhou com o Oracle Support nisso- este é um defeito no Kodo 4.2 (a versão mais recente). A correção é retirar completamente completamente o atributo de grupo de fusão padrão (não basta configurá-lo como true ou falso) do arquivo de metadados JDO para os campos que estão no lado individual do relacionamento bidirecional. Portanto, no exemplo acima, você retiraria o atributo de grupo de foco padrão para o campo do aluno._classroom.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top