O rawfilter é um filtro utilizado para buscar objetos no banco dentro das classes JAVA, também denominado adapter. Ele é o filtro mais semelhante com SQLs/querys executadas em bancos de dados convencionais. Abaixo dois exemplos de como realizá-los:
Situação 1: buscar na tabela NeoUser um usuário a partir do nome completo
Passo 1: criar a instância da classe QLGroupFilter, passando qual o tipo de parâmetro, esse parâmetro pode ser comparado ao complemento WHERE, onde existem apenas dois operadores: AND e OR.
QLGroupFilter filter = new QLGroupFilter(“AND”);
Passo 2: criar a instância da classe QLRawFilter que recebe como parâmetro a query para realizar a busca. É possível definir as variáveis apenas com a seguinte expressão: :param1.
QLRawFilter rawFilter = new QLRawFilter(“fullName LIKE :param1 OR neoId > :param2”);
Passo 3: definir quais são os dados que realmente devem ser utilizados para cada parâmetro.
rawFilter.addParam(“:param1”, “Cristiano%”);
rawFilter.addParam(“:param2”, 19668785L);
Passo 4: Incluir o filtro secundário, com a query, no filtro principal – QLGroupFilter.
filter.addFilter(rawFilter);
Passo 5: incluir filtro na variável que recebe os objetos de retorno, é preciso especificar qual tipo de será retornado, tanto na tipagem da variável como nos parâmetros da classe PersistEngine, que realiza a busca dos registros a partir do filtro especificado.
Situação 2: buscar o número de TaskInstances em que um usuário específico possui gestão
Passo 1: criar a instância da classe QLGroupFilter, passando qual o tipo de parâmetro, esse parâmetro pode ser comparado ao complemento WHERE, onde existem apenas dois operadores: AND e OR.
QLGroupFilter gf = new QLGroupFilter(“AND”);
Passo 2: criar a instância da classe QLRawFilter que recebe como parâmetro a query para realizar a busca, é possível utilizar cláusulas de JOIN e a definição de parâmetros.
QLRawFilter rawFilter1 = new QLRawFilter(“$id in (select ti2.id from TaskInstance ti2 join ti2.managers m where m.neoId in (:param1))”);
Passo 3: buscar IDs dos papéis e grupos que o usuário com id 123124 possui.
List<Long> listIds = this.getUserRoles(123124L);
Passo 4: definir quais são os dados que realmente devem ser utilizados para cada parâmetro. Incluir o filtro secundário, com a query, no filtro principal – QLGroupFilter. Aqui é possível perceber, que o parâmetro na verdade pode ser uma cadeia de strings.
rawFilter1.addParam(“:param1”, listIds);
Passo 5: incluir o filtro secundário, com a query, no filtro principal – QLGroupFilter.
gf.addFilter(rawFilter1);
Passo 6: incluir outro filtro secundário para buscar as TaskInstances que possuem o status completo.
gf.addFilter(new QLOpFilter(“status”, “<>”, TaskStatus.COMPLETED.ordinal()));
Passo 7: utilizar o método countObjects da classe PersistEngine que retorna à quantidade de registros para a classe especificada no primeiro parâmetro e utilizando o filtro do segundo parâmetro.
Long count = PersistEngine. countObjects(TaskInstance.class, gf);
Observações importantes: o segundo parâmetro do método addParam() aceita qualquer Object, mas é necessário, atentar para utilizar o tipo de dado que corresponde à coluna que será buscada na query