ORMLite - item de retorno com ID máximo (ou valor)
Pergunta
Estou usando ORMLite com Android.Quero pegar o valor do ID do objeto com o ID de maior valor.
Também gostaria de generalizar isso para solicitar um único objeto com valor máximo/mínimo para qualquer campo arbitrário.Qual é a melhor prática para fazer isso?
Sei que poderia executar uma consulta bruta, mas existe alguma outra maneira que chame a atenção de alguém?Estou imaginando algo semelhante aos Predicados ao executar FetchRequests em CoreData no iOS.
Solução
Sua resposta parece boa, @Ben, mas pensei em fornecer algumas informações extras para a posteridade:
Você poderia usar um
queryForFirst
se você conhece o seulimit(1)
retornará um único resultado.qBuilder.orderby("my_field_column_name", false); qBuilder.limit(1L); MyEntity maxEntity = myEntityDao.queryForFirst(qBuilder.prepare());
Uma consulta bruta também funcionaria.Envolve mais objetos e verificação, mas será mais barato se o tamanho da mesa for grande, pois você não precisa fazer o pedido.
qBuilder.selectRaw("MAX(my_field_column_name)"); GenericRawResults<String[]> results = myEntityDao.queryRaw(qBuilder.prepareStatementString()); String[] result = results.getResults().next(); int max = Integer.parseInt(result[0]);
Obviamente, se sua coluna fosse de um tipo diferente, você obteria um objeto diferente de result[0]
que você teria que converter no tipo apropriado dependendo do objeto.
Outras dicas
Ahh, após uma análise mais aprofundada da documentação do ORMLite, parece que quero algo como esse:
QueryBuilder<MyEntity,ItsIdType> qBuilder = myEntityDao.queryBuilder();
qBuilder.orderby("my_field_column_name",false); // false for descending order
qBuilder.limit(1);
List<MyEntity> listOfOne = qBuilder.query();