Hibernate - Problemas recuperar os dados

Olá, pessoal!

já tentamos várias vezes que não encontramos para resolver a problemas que não recupera os dados e apareceu mensagem de erros…

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: java.lang.NullPointerException
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:500)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:428)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

java.lang.NullPointerException
	org.apache.jsp.MostraTela_jsp._jspService(MostraTela_jsp.java:72)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.30 logs.

Controlador

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		SessionFactory sf = (new AnnotationConfiguration().configure("/cpg/hibernate.cfg.xml")).buildSessionFactory();
		Session sessao = sf.openSession();
		
		SQLQuery query = sessao.createSQLQuery("SELECT * From Cliente");
		query.addEntity(Cliente.class);
		
		
		List<Cliente> res = query.list();
		
		request.setAttribute("res",res);
		RequestDispatcher rd = request.getRequestDispatcher("MostraTela.jsp");
		rd.forward(request, response);
		
	}

MostraTela.jsp

[code]

<% List lista = (List) request.getAttribute("res"); %> <% for(Cliente cli : lista) {%>
<tr>
<td>${cli.id }</td>
<td>${cli.nome }</td>
<td>${cli.idade }</td>
</tr>

<%} %>

ID Nome Idade
[/code]

Classe Cliente

@Entity
public class Cliente {
	@Id
	@GeneratedValue
	private int id;
	@Column(name="nome")
	private String nome;
	@Column(name="idade")
	private int idade;
	@OneToOne(cascade=CascadeType.ALL)
	private Enderenco end; // Classe Endereço
	public Enderenco getEnd() {
		return end;
	}
	public void setEnd(Enderenco end) {
		this.end = end;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public int getIdade() {
		return idade;
	}
	public void setIdade(int idade) {
		this.idade = idade;
	}

}

Espero que vcs me ajudem…

so um detalhe, pq está usando SQLQuery? é de fato necessario? se nao estou equivocado sqlquery ele retorna um array de Object e nao uma List.

tenta ai:

Query query = session.createQuery("from Cliente"); 
List<Cliente> lista = query.list();

flw.

Faz como LPJava exemplificou, usa o HQL e não SQL.
NO createSqlQuery ele retorna uma lista, mas dai vc passa a trabalhar com tabelas e não objetos, tem que ver se o seu banco não diferencia letras maiúsculas de minúsculas, esse é dos problemas que podem ocorrer em trabalhar com tabelas.
E no createSqlQuery o retorno é um objeto Query e não SQLQuery, tipo assim:Query query = sess.createSQLQuery("SELECT * FROM CLIENTES").addEntity(Cliente.class);

Você debugou para ver se sua consulta realmente retorna dados?

hm eu pouco trabalhei com SQLQuery com hibernate so quando o banco nao dava suporte, mas os mais tradicionais fazem isso. Agora esse questao do case-sensitive é importante há bancos que enchem o saco com isso, o mysql, foi o mais liberal que já usei a respeito disso e outros pontos, e o mais chato foi o db2. hehe

[quote=LPJava]so um detalhe, pq está usando SQLQuery? é de fato necessario? se nao estou equivocado sqlquery ele retorna um array de Object e nao uma List.

tenta ai:

Query query = session.createQuery("from Cliente"); 
List<Cliente> lista = query.list();

flw.[/quote]

Já testamos as duas e nem funcionou nenhum… as mesmas mensagem de erro que mostrei antes…

Na época da faculdade em uma matéria de banco de dados, nós usamos o PostgreSql e ele tinha esse caso do case-sensitive, não se ainda tem nas novas versões, mas era muito ruim. Quando era o cara que criava o banco e as tabelas tudo bem, mas quando era outro colega e o cara ia mexer, começava a dar problemas e o cara ainda muito “cru”, demora pra perceber o que era, hehe.

debug nele, que tu vai descobrir o pq ele ta recebendo aquela excecao e ao mesmo tempo é uma forma de aprender o que nem sempre encontramos nos livros e só vai qdo está nesse sofrimento terrivel que eh ver erros de code.

heheh abracos,