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

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:

[code]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();

}
}[/code]

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

posta a exception

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();
}  
        }  

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)

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

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

HibernateUtil

[code]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();
}

}[/code]

hibernate.cfg.xml

[code]



com.mysql.jdbc.Driver


jdbc:mysql://localhost/reprografia


org.hibernate.dialect.MySQLDialect
root
jovenssarados

true
true

2
5
300

50


3000

</session-factory>
[/code]

Aluno

[code]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;
}

}[/code]

AlunoService

[code]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();
	}
}

}[/code]

AlunoBean

[code]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;
	
}

}
[/code]

E por fim, o teste.xhtml

[code]

<?xml version="1.0" encoding="ISO-8859-1" ?> Testando alunos com PrimeFaces

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>

[/code]

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();
	}
}

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;
	}

}

[code]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;
}

}
[/code]

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?