Duvida Hibernate encontra o primeiro registro automático?

7 respostas
P

Olá,

tenho a rotina abaixo que lê desde o primeiro registro da tabela mais como é cadastro de pergunta
e se for deletado o registro numero 1 ai f…

O que queria saber se o Hibernate tem como me dar o primeiro registro da tabela em ordem de numero
e se eu passar esse numero (id da tabela) me retorna o próximo ou seja ,

id
100
105
106
107
108
109

Se alguém puder me ajudar agradeceria…

abs
rotina atual

/* Nova Pergunta */
			perguntaAlunoUsado = new PerguntaAluno();		
			respostaAluno = new RespostaAluno();
			contador = contador +1;
			perguntaAlunoUsado.setId(contador);
			perguntaAlunoUsado=	   perguntaAlunoBC.buscar(perguntaAlunoUsado);
			
			
			respostaAluno.setPerguntaAluno(perguntaAlunoUsado);
			for (IMessage imsg : WebMessageContext.getInstance().getMessages()) {
			addMessage(imsg);
			}
			} catch (ApplicationRuntimeException e) {
			addMessage(e.getObjectMessage(), e);
			}
			WebMessageContext.getInstance().clear();
		return AliasNavigationRule.ALIAS_RESPOSTA_ALUNO_RESPONDE;

7 Respostas

aluisiodsv

O correto é vc trazer todos os registros do banco de dados e não um por um.
Assim ele já traz o id pra vc. Aí sim vc vê o q faz com o ID.

Do jeito que está fazendo vc está tentando adivinhar o ID das perguntas.

P

mas eu tenho uma pergunta por página e a idéia é um ter 50 perguntas

por isso trago uma a uma .

Por isso estou fazendo dessa forma ???

aluisiodsv

Vc não pode se basear chutando qual id é a pergunta.
Faça um select q traga a primeira linha, depois um q traga a segunda linha, e assim por diante.
Use LIMIT e OFFSET.

SELECT p FROM PerguntaAluno p LIMIT 1
essa é a primeira pergunta.

SELECT p FROM PerguntaAluno p LIMIT 1 OFFSET 1
essa é a segunda pergunta.

SELECT p FROM PerguntaAluno p LIMIT 1 OFFSET 2
essa a terceira, e por aí vai.

Aí ao pegar a entidade, vc terá o id, e através deste id vc trás as respostas que estão relacionadas com esta pergunta.

LPJava

veja se o HQL ou Criteria nao tem algo que ti ajude antes de usar SQL.

aluisiodsv

Então vamos as outras maneiras …
A consulta já está em hql e se quiser pode retirar o “SELECT p” dela.
Outras formas é pelo criteria com os métodos, .setFirstResult, e .setMaxResults …

P

olá,

como faço pra usar o comando SELECT p FROM PerguntaAluno p LIMIT 1

public PerguntaAluno buscar(PerguntaAluno aluno, int registro) {
		PerguntaAluno perguntaAluno = null;
		
		String hql = "";
		
		try {   

			if(registro==0){
				hql ="SELECT p FROM PerguntaAluno p LIMIT 1 " ;	
			}else{
				hql ="SELECT p FROM PerguntaAluno p LIMIT 1 OFFSET "+registro ;
			}
			perguntaAluno = (PerguntaAluno) HibernateUtil.getInstance().getSession().createQuery(hql);

		} catch(Exception e) {
			System.out.println( "Não foi possível encontrar Pergunta Aluno."+ e);
		}
		
		return perguntaAluno;				
		
	}
11/03/2011 08:20:09 org.hibernate.hql.PARSER reportError
ERROR: line 1:55: unexpected token: LIMIT 
£o foi pos­vel encontrar Pergunta Aluno.org.hibernate.hql.ast.QuerySyntaxException: unexpected token: LIMIT near line 1, column 55 [SELECT p FROM ao.edu.imag.avalia.bean.PerguntaAluno p LIMIT 1 ]
aluisiodsv
public PerguntaAluno buscar(PerguntaAluno aluno, int registro) {  
  PerguntaAluno perguntaAluno = null;  

  String hql = "";  

  try {     

      hql ="SELECT p FROM PerguntaAluno p " ;   

      Query q = HibernateUtil.getInstance().getSession().createQuery(hql);
      q.setMaxResults(1);
      q.setFirstResult(registro);

      perguntaAluno = (PerguntaAluno) q.getSingleResult(); // Este método é do JPA se não me engano. Se estiver usando Hibernate puro é outro.

  } catch(Exception e) {  
    System.out.println( "Não foi possível encontrar Pergunta Aluno."+ e);  
  }  

  return perguntaAluno;                 

}
Criado 9 de março de 2011
Ultima resposta 12 de mar. de 2011
Respostas 7
Participantes 3