createCriteria.list() do Hibernate não retorna dados

8 respostas
prog.tiago

Boa tarde,

Amigos, o que posso estar fazendo errado? Estou tentando usar Hibernate com JSF.

Criei a SessionFactory, e agora estou tentando utilizar o método createCriteria().list() para retornar uma lista de dados do meu banco. Vejam:

public static void main(String[] args) {
		Session session=HibernateUtil.getSession();
		try{
		
			List<Curso> lista=lista=session.createCriteria(Curso.class).list();
			for (Curso curso : lista) {
				System.out.println(curso.getCurso());
				
			}
		}finally{
			session.close();
}
		}

Existem dados na tabela, mas nada é retornado. Também não é lançada nenhuma exception. Estranho!

8 Respostas

M

posta a exception

M

tente assim

public static void main(String[] args) {  
        Session session=HibernateUtil.getSession();  
        try{  
session.beginTransaction();
            List<Curso> lista = session.createCriteria(Curso.class).list();  
            for (Curso curso : lista) {  
                System.out.println(curso.getCurso());  
                  
            }  
        }finally{  
session.getTransaction().commit();
}  
        }
prog.tiago

Boa tarde michelorth_92

Alterando o código para como você disse, é lançado a seguinte exception:

org.hibernate.TransactionException: Transaction not successfully started at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:127) at br.com.tiago.acad.services.AlunoService.main(AlunoService.java:36)

M

posta seu codigo inteiro pra da uma olhada… seu dao… seu sessionFactory

prog.tiago

Obrigado pela disposição de analisar meu código querido!

HibernateUtil

package br.com.tiago.acad.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

@SuppressWarnings("deprecation")
public class HibernateUtil {

	private static SessionFactory sessionFactory;
	static {
		try {
			sessionFactory = new AnnotationConfiguration().configure()
					.buildSessionFactory();
		} catch (Throwable ex) {
			throw new ExceptionInInitializerError(ex);
		}
	}

	public static Session getSession() {
		return sessionFactory.openSession();
	}

}

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="connection.driver_class">
			com.mysql.jdbc.Driver
</property>
		<property name="connection.url">
			jdbc:mysql://localhost/reprografia
</property>
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect</property>
		<property name="connection.username">root</property>
		<property name="connection.password">jovenssarados</property>
		<!-- Imprime os SQLs na saida padrao -->
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
		 <!-- Pool de conexoes -->
		<property name="hibernate.c3p0.min_size">2</property>
		<property name="hibernate.c3p0.max_size">5</property>
		<property name="hibernate.c3p0.timeout">300</property>
		<property name="hibernate.c3p0.max_statements">
			50
</property>
		<property name="hibernate.c3p0.idle_test_period">
			3000
</property>

	</session-factory>
</hibernate-configuration>

Aluno

package br.com.tiago.acad.dominio;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity(name = "tbl_alunos")
public class Aluno {

	@Id
	@GeneratedValue
	private Long codigo;
	private String matricula;
	private String nome;
	@ManyToOne @JoinColumn(name="codigoCurso")
	private Curso curso;
	@ManyToOne @JoinColumn(name="codigoDisciplina")
	private Disciplina disciplina;
	@ManyToOne @JoinColumn(name="codigo")
	private Semestre semestre;
	@ManyToOne @JoinColumn(name="codigo")
	private Turno turno;

	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Curso getCurso() {
		return curso;
	}

	public void setCurso(Curso curso) {
		this.curso = curso;
	}

	public Disciplina getDisciplina() {
		return disciplina;
	}

	public void setDisciplina(Disciplina disciplina) {
		this.disciplina = disciplina;
	}

	public Semestre getSemestre() {
		return semestre;
	}

	public void setSemestre(Semestre semestre) {
		this.semestre = semestre;
	}

	public Turno getTurno() {
		return turno;
	}

	public void setTurno(Turno turno) {
		this.turno = turno;
	}

}

AlunoService

package br.com.tiago.acad.services;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;

import br.com.tiago.acad.dominio.Aluno;
import br.com.tiago.acad.dominio.Curso;
import br.com.tiago.acad.util.HibernateUtil;

public class AlunoService {
	
	@SuppressWarnings("unchecked")
	public List<Aluno> listarAlunos(){
		Session session=HibernateUtil.getSession();
		try{
			return session.createCriteria(Aluno.class).list();
		}finally{
			session.close();
		}
	}
}

AlunoBean

package br.com.tiago.acad.managedBeans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import br.com.tiago.acad.dominio.Aluno;
import br.com.tiago.acad.services.AlunoService;

@ManagedBean(name="alunoBean")
@SessionScoped
public class AlunoBean{
	
	private List<Aluno> lista=new ArrayList<Aluno>();
	public List<Aluno> getLista(){
		lista=new AlunoService().listarAlunos();
		
		return lista;
		
	}

}

E por fim, o teste.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title>Testando alunos com PrimeFaces</title>
</h:head>
<h:body>

Testando aplicativos com JavaServerFaces e PrimeFaces

<h:form>
		<p:orderList value="#{alunoBean.lista}" var="lista"
			controlsLocation="none" itemLabel="teste" itemValue="teste"
			iconOnly="false" />

	</h:form>

</h:body>
</html>
M

1° falta declarar suas classes no hibernate.cfg

ex

2° mude seu sesion factory assim e teste

public class HibernateUtil {

	private static SessionFactory sF;

	private HibernateUtil() {

	}

	public static SessionFactory getSf() {

		if (sF == null) {
			try {
		AnnotationConfiguration cfg = new AnnotationConfiguration();		
						 
				
				sF = cfg.configure().buildSessionFactory();

			} catch (Throwable ex) {
				System.err.println("Initial SessionFactory creation failed  " + ex);
				throw new ExceptionInInitializerError(ex);
			}

			return sF;

		} else {

			return sF;
			
		}

	}

	public static void main(String[] args) {
		HibernateUtil.getSf();
	}
}
prog.tiago

Obrigado, funcionou!

Era a questão dos mapeamentos mesmo

Agora no entanto está sendo lançada uma Exception: org.hibernate.MappingException: Repeated column in mapping for entity: br.com.tiago.acad.dominio.Aluno column: codigo (should be mapped with insert="false" update="false")

Não existe nenhuma coluna repetida.

package br.com.tiago.acad.dominio;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity(name = "tbl_alunos")
public class Aluno {

	@Id
	@GeneratedValue
	private Long codigo;
	private String matricula;
	private String nome;
	@ManyToOne @JoinColumn(name="codigo")
	private Curso curso;
	@ManyToOne @JoinColumn(name="codigo")
	private Disciplina disciplina;
	@ManyToOne @JoinColumn(name="codigo")
	private Semestre semestre;
	@ManyToOne @JoinColumn(name="codigo")
	private Turno turno;

	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Curso getCurso() {
		return curso;
	}

	public void setCurso(Curso curso) {
		this.curso = curso;
	}

	public Disciplina getDisciplina() {
		return disciplina;
	}

	public void setDisciplina(Disciplina disciplina) {
		this.disciplina = disciplina;
	}

	public Semestre getSemestre() {
		return semestre;
	}

	public void setSemestre(Semestre semestre) {
		this.semestre = semestre;
	}

	public Turno getTurno() {
		return turno;
	}

	public void setTurno(Turno turno) {
		this.turno = turno;
	}

}
prog.tiago
Nossa,

comi bola legal,

No código anterior, eu estava mapeando sempre a coluna "codigo".

O código correto é:


package br.com.tiago.acad.dominio;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity(name = "tbl_alunos")
public class Aluno {

	@Id
	@GeneratedValue
	private Long codigo;
	private String matricula;
	private String nome;
	@ManyToOne @JoinColumn(name="curso")
	private Curso curso;
	@ManyToOne @JoinColumn(name="disciplina")
	private Disciplina disciplina;
	@ManyToOne @JoinColumn(name="semestre")
	private Semestre semestre;
	@ManyToOne @JoinColumn(name="turno")
	private Turno turno;

	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Curso getCurso() {
		return curso;
	}

	public void setCurso(Curso curso) {
		this.curso = curso;
	}

	public Disciplina getDisciplina() {
		return disciplina;
	}

	public void setDisciplina(Disciplina disciplina) {
		this.disciplina = disciplina;
	}

	public Semestre getSemestre() {
		return semestre;
	}

	public void setSemestre(Semestre semestre) {
		this.semestre = semestre;
	}

	public Turno getTurno() {
		return turno;
	}

	public void setTurno(Turno turno) {
		this.turno = turno;
	}

}

Só uma pergunta, fiz engenharia reversa usando o NetBeans, e percebi que ele sempre usou fetch=FetchType.LAZY

Quando devo usá-lo? Para que serve?

Criado 13 de janeiro de 2012
Ultima resposta 13 de jan. de 2012
Respostas 8
Participantes 2