Pergunta

Pode-se facilmente usar sintaxe JDO para consulta em vários parâmetros da seguinte forma:

//specify the persistent entity you're querying and you filter usign params
query = pm.newQuery(MyClass.class, " customer == paramCustomer && date >= paramStartDate && date <=paramEndDate ");

// declare params used above
query.declareParameters("com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate"); 

//pass the object declared as params
MyClassList = (List<MyClass>) query.execute(user, startDate, endDate);

É simples de construir programaticamente uma string com o filtro:

"customer == paramCustomer && date >= paramStartDate && date <=paramEndDate"

e outro strign com a declaração Parâmetros:

"com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate"

O que não é imediato é chegar a uma estratégia para executar a consulta, dependendo de qual params estão no filtro (e tenham sido declarados), assim você acaba com uma série de realmente feio e ad-hoc em cascata if-else declarações com todas as permutações possíveis da execução da consulta (todos os params, apenas o primeiro, apenas o segundo, primeiro e segundo etc ...):

MyClassList = (List<MyClass>) query.execute(user, startDate, endDate);

Estou certo de que este é uma tarefa comum e alguém está fazendo isso de uma maneira mais geral e eficiente.

Qualquer sugestão?

Foi útil?

Solução

Eu encontrei uma solução no método query.executeWithArray

Desta forma I pode construir filtros e declaração param dinamicamente uma carga até os objectos reais em uma matriz de objecto, que é então transmitido para o método mencionado acima.

Outro método importante é executeWithMap qual você pode usar para parâmetros de vinculação pelo nome.

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