michelorth_92 13 de jan. de 2012
michelorth_92 13 de jan. de 2012
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 13 de jan. de 2012
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)
michelorth_92 13 de jan. de 2012
posta seu codigo inteiro pra da uma olhada… seu dao… seu sessionFactory
prog.tiago 13 de jan. de 2012
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 >
michelorth_92 13 de jan. de 2012
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 13 de jan. de 2012
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 13 de jan. de 2012
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?