Estou tentando criar em meu projeto os botoes (Primeiro, Anterior, Proximo e Ultimo) e gostaria de saber como obter essas informações com persistence e mysql eu jah tentei usar o Limit 1 no sql mas nao deu certo
voce pode fazer essas ações com a propria List que voce retorna do banco e como vc faz um select de todos os elementos do banco ela vai vir ordenada pelo codigo então
Pra vc criar um SQL que retorne apenas o primeiro registro você deve usar:
SELECT (*) FROM base.tabela
ORDER BY (coluna) ASC
LIMIT 1
(Achei estranho pois disse que não funcionou usando LIMIT. Ele não trouxe resultado algum ou gerou um erro no SQL?)
Para pegar o último valor na base a idéia é a mesma:
SELECT (*) FROM base.tabela
ORDER BY (coluna) DESC
LIMIT 1
Não sou muito a favor de trazer para o código coisas que o banco pode realizar, como essas pesquisas simples mesmo para retornar um primeiro valou ou o último valor, até por que se sistema, não deve possuir milhões de registros com acesso concorrente para prejudicar o desempenho ou algo deste tipo.
ficou da maneira que eu precisava abaixo codigo de como ficou
public Entidade primeiro() {
Entidade entidade = null;
try {
Query query = em.createQuery("Select e From Entidade e");
List<Entidade> rel = query.getResultList();
entidade = rel.get(0);
} catch (Exception e) {
e.getMessage();
}
return entidade;
}
public Entidade ultimo() {
Entidade entidade = null;
try {
Query query = em.createQuery("Select e From Entidade e");
List<Entidade> rel = query.getResultList();
entidade = rel.get(rel.size() - 1);
} catch (Exception e) {
e.getMessage();
}
return entidade;
}
public Entidade anterior(Integer codigo) {
Entidade entidade = null;
try {
Query query = em.createQuery("Select e From Entidade e Where e.iEntidade < " + codigo);
List<Entidade> rel = query.getResultList();
entidade = rel.get(rel.size() - 1);
} catch (Exception e) {
e.getMessage();
}
return entidade;
}
public Entidade proximo(Integer codigo) {
Entidade entidade = null;
try {
Query query = em.createQuery("Select e From Entidade e Where e.iEntidade > " + codigo);
List<Entidade> rel = query.getResultList();
entidade = rel.get(0);
} catch (Exception e) {
e.getMessage();
}
return entidade;
}
agora eu queria tirar mais uma duvida
quando eu clico no botao anterior ou proximo e ele ultrapassa o ultimo registro ele me traz vazio o formulario. eu gostaria que quando nao tivesse mais para trazer ele me desse sempre o ultimo registro…
Como citei sou contra de você trazer algumas ações para o programa que o SGBD pode realizar tranquilamente.
Seu método primeiro() retorna todos os registro em seu SQL, veja bem, isso é totalmente desnecessário, tendo em vista que quer apenas o primeiro assim como o método ultimo(). Apenas uma pequena sugestão para melhorar sua aplicação, mas já visando desempenho, até por que você alimenta uma lista, com n valores para pegar apenas um entende? A sugestão de SQL que dei pode resolver isto tranquilamente.