[RESOLVIDO]Hibernate + Criteria

3 respostas
Cledsonjr

Boa noite

Está dando uma exception no meu Hibernate. Pesquisei na net e nada me fez achar o erro.

Segue as classe mapeadas e a consulta.

package br.com.matricula.modelo;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;

@Entity
@SequenceGenerator(name = "alunoSequence", sequenceName = "alunoSequence")
public class Aluno implements Serializable {

	@Id
    @Column(name="id_aluno") 
    @GeneratedValue(strategy=GenerationType.AUTO, generator="alunoSequence")
	private int idAluno;
	private String nomeAluno;
	private String nomeMae;
	private String nomeResponsavel;
	private String dtNascimento;
	private String telefone;
	private String celular;
	private String email;
	private static final long serialVersionUID = 1L;

	@OneToMany(targetEntity = AlunoLista.class,cascade = { CascadeType.ALL, CascadeType.ALL})
	@JoinColumn(name = "id_alunolista")
	private List<AlunoLista> alunoListas;
	
	public List<AlunoLista> getAlunoListas() {
		return alunoListas;
	}
	public void setAlunoListas(List<AlunoLista> alunoListas) {
		this.alunoListas = alunoListas;
	}
	public int getIdAluno() {
		return idAluno;
	}
	public void setIdAluno(int idAluno) {
		this.idAluno = idAluno;
	}
	public String getNomeAluno() {
		return nomeAluno;
	}
	public void setNomeAluno(String nomeAluno) {
		this.nomeAluno = nomeAluno;
	}
	public String getNomeMae() {
		return nomeMae;
	}
	public void setNomeMae(String nomeMae) {
		this.nomeMae = nomeMae;
	}
	public String getNomeResponsavel() {
		return nomeResponsavel;
	}
	public void setNomeResponsavel(String nomeResponsavel) {
		this.nomeResponsavel = nomeResponsavel;
	}
	public String getDtNascimento() {
		return dtNascimento;
	}
	public void setDtNascimento(String dtNascimento) {
		this.dtNascimento = dtNascimento;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getCelular() {
		return celular;
	}
	public void setCelular(String celular) {
		this.celular = celular;
	}

}
package br.com.matricula.modelo;

import java.io.Serializable;
import java.util.Calendar;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;

@Entity
@SequenceGenerator(name = "SEQ_ALUNOLISTA", sequenceName = "sequence_alunolista_id", allocationSize = 1)
public class AlunoLista implements Serializable {

	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_ALUNOLISTA")
	@Column(name = "id_alunolista")
	private int id;
	@ManyToOne(cascade = CascadeType.DETACH)
	private Escola escolaOp1;
	@ManyToOne(cascade = CascadeType.DETACH)
	private Escola escolaOp2;
	@ManyToOne(cascade = CascadeType.DETACH)
	private Escola escolaOp3;
	private int escolaLista1;
	private int escolaLista2;
	private int escolaLista3;
	private int matriculado;
	private String matriculadoEscola;
	
	//@ManyToOne(cascade = CascadeType.DETACH)
	@ManyToOne(targetEntity = Aluno.class, fetch = FetchType.LAZY, optional = false)
	private Aluno aluno;
	
	@ManyToOne(cascade = CascadeType.DETACH)
	private Vagas vagas1;
	@ManyToOne(cascade = CascadeType.DETACH)
	private Vagas vagas2;
	@ManyToOne(cascade = CascadeType.DETACH)
	private Vagas vagas3;
	private boolean confirmarOp1;
	private boolean confirmarOp2;
	private boolean confirmarOp3;
	private Calendar dataMatricula;

	
	public boolean isConfirmarOp1() {
		return confirmarOp1;
	}

	public void setConfirmarOp1(boolean confirmarOp1) {
		this.confirmarOp1 = confirmarOp1;
	}

	public boolean isConfirmarOp2() {
		return confirmarOp2;
	}

	public void setConfirmarOp2(boolean confirmarOp2) {
		this.confirmarOp2 = confirmarOp2;
	}

	public boolean isConfirmarOp3() {
		return confirmarOp3;
	}

	public void setConfirmarOp3(boolean confirmarOp3) {
		this.confirmarOp3 = confirmarOp3;
	}

	public Vagas getVagas1() {
		return vagas1;
	}

	public void setVagas1(Vagas vagas1) {
		this.vagas1 = vagas1;
	}

	public Vagas getVagas2() {
		return vagas2;
	}

	public void setVagas2(Vagas vagas2) {
		this.vagas2 = vagas2;
	}

	public Vagas getVagas3() {
		return vagas3;
	}

	public void setVagas3(Vagas vagas3) {
		this.vagas3 = vagas3;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Escola getEscolaOp1() {
		return escolaOp1;
	}

	public void setEscolaOp1(Escola escolaOp1) {
		this.escolaOp1 = escolaOp1;
	}

	public Escola getEscolaOp2() {
		return escolaOp2;
	}

	public void setEscolaOp2(Escola escolaOp2) {
		this.escolaOp2 = escolaOp2;
	}

	public Escola getEscolaOp3() {
		return escolaOp3;
	}

	public void setEscolaOp3(Escola escolaOp3) {
		this.escolaOp3 = escolaOp3;
	}

	public int getEscolaLista1() {
		return escolaLista1;
	}

	public void setEscolaLista1(int escolaLista1) {
		this.escolaLista1 = escolaLista1;
	}

	public int getEscolaLista2() {
		return escolaLista2;
	}

	public void setEscolaLista2(int escolaLista2) {
		this.escolaLista2 = escolaLista2;
	}

	public int getEscolaLista3() {
		return escolaLista3;
	}

	public void setEscolaLista3(int escolaLista3) {
		this.escolaLista3 = escolaLista3;
	}

	public String getMatriculadoEscola() {
		return matriculadoEscola;
	}

	public void setMatriculadoEscola(String matriculadoEscola) {
		this.matriculadoEscola = matriculadoEscola;
	}

	public int getMatriculado() {
		return matriculado;
	}

	public void setMatriculado(int matriculado) {
		this.matriculado = matriculado;
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public Calendar getDataMatricula() {
		return dataMatricula;
	}

	public void setDataMatricula(Calendar dataMatricula) {
		this.dataMatricula = dataMatricula;
	}
}
Se passo dessa maneira ele me retorna -1
public List<AlunoLista> list(Aluno idAluno) {
    	Session session = HibernateUtil.getSessionFactory().openSession();
    	Criteria criteria = session.createCriteria(AlunoLista.class);
    	criteria.add(Restrictions.eq("aluno", idAluno));
    	List lista = criteria.list();
    	session.close();
    return lista;
        
    }

Se faço assim:

public List<AlunoLista> list(Aluno idAluno) {
    	Session session = HibernateUtil.getSessionFactory().openSession();
    	Criteria criteria = session.createCriteria(AlunoLista.class);
    	criteria.add(Restrictions.eq("aluno", idAluno.getIdAluno()));
    	List lista = criteria.list();
    	session.close();
    return lista;
        
    }
ele solta a seguinte exeception
SEVERE: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.com.matricula.modelo.Aluno.idAluno

Alguém poderia me explicar o pq disso e como arrumar?

Desde de já. Obrigado!

3 Respostas

aprendizweb

Da uma olhada aqui: http://www.guj.com.br/java/57119-exception-hibernate-1n-resolvido

wagnerfrancisco
Cledsonjr:
Se passo dessa maneira ele me retorna -1
public List<AlunoLista> list(Aluno idAluno) {
    	Session session = HibernateUtil.getSessionFactory().openSession();
    	Criteria criteria = session.createCriteria(AlunoLista.class);
    	criteria.add(Restrictions.eq("aluno", idAluno));
    	List lista = criteria.list();
    	session.close();
    return lista;
        
    }

Retorna -1 aonde? Não entendi. Já chegou o sql gerado pelo Hibernate para ver o que acontece?

Se faço assim:
public List<AlunoLista> list(Aluno idAluno) {
    	Session session = HibernateUtil.getSessionFactory().openSession();
    	Criteria criteria = session.createCriteria(AlunoLista.class);
    	criteria.add(Restrictions.eq("aluno", idAluno.getIdAluno()));
    	List lista = criteria.list();
    	session.close();
    return lista;
        
    }
ele solta a seguinte exeception
SEVERE: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.com.matricula.modelo.Aluno.idAluno

Nesse caso tá errado mesmo, você usando o id para filtrar a entidade. Teria que ser Restrictions.eq("aluno.idAluno'', idAluno.getIdAluno()). Mas é desnecessário, a maneira que você postou anteriormente é a correta. Confira o sql pra ver pq não retornou o que vc esperava.

Cledsonjr

Obrigado pela ajuda!

Criado 14 de setembro de 2012
Ultima resposta 18 de set. de 2012
Respostas 3
Participantes 3