Tenho uma aplicação que utiliza JSF com JPA (Hibernate) e Mysql como DB.
Tenho duas classes mapeadas com Hibernate (Aluno, Turma), sendo que a classe Aluno tem um atributo do tipo Turma chamado turma_id que faz referencia a classe Turma (atributo id).
Também tenho dois manage beans (AlunoBean, TurmaBean).
Tenho uma view novoAluno.xhtml que contem um formulário que invoca um método (salvaAluno da classe AlunoBean) responsavel por salvar um novo aluno no banco de dados.
Quando o método é invocado, é retornado para o browser uma mensagem de erro de validação ( <h:message for=“turma” /> ), informando o seguinte :
[color=red]Erro de conversão ao definir o valor ‘1’ para ‘null Converter’. [/color]
Alguém pode me ajudar ?
Se tiver que fazer um converter, postem um exemplo de como tem que ser feito baseado nas minhas classes que seguem abaixo…
Aluno.java
package pojos;
import java.io.Serializable;
import javax.persistence.*;
/**
* The persistent class for the alunos database table.
*
*/
@Entity
@Table(name="alunos")
public class Aluno implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique=true, nullable=false)
private int id;
@Column(nullable=false, length=45)
private String nome;
//bi-directional many-to-one association to Turma
@ManyToOne
@JoinColumn(name="turma_id", nullable=false)
private Turma turma;
public Aluno() {
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Turma getTurma() {
return this.turma;
}
public void setTurma(Turma turma) {
this.turma = turma;
}
}
Turma.java
package pojos;
import java.io.Serializable;
import javax.persistence.*;
import java.util.List;
/**
* The persistent class for the turmas database table.
*
*/
@Entity
@Table(name="turmas")
public class Turma implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique=true, nullable=false)
private int id;
@Column(nullable=false, length=45)
private String nome;
//bi-directional many-to-one association to Aluno
@OneToMany(mappedBy="turma")
private List<Aluno> alunos;
public Turma() {
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Aluno> getAlunos() {
return this.alunos;
}
public void setAlunos(List<Aluno> alunos) {
this.alunos = alunos;
}
}
AlunoBean.java
package beans;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import pojos.Aluno;
public class AlunoBean {
private EntityManagerFactory factory = Persistence
.createEntityManagerFactory("CadastroAlunos");
private Aluno aluno = new Aluno();
public Aluno getAluno() {
return aluno;
}
public void setAluno(Aluno aluno) {
this.aluno = aluno;
}
public String salvaAluno() {
try {
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
em.persist(aluno);
em.getTransaction().commit();
em.close();
return "sucesso";
} catch (Exception e) {
e.printStackTrace();
return "erro";
}
}
}
TurmaBean.java
package beans;
import java.util.ArrayList;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import pojos.Turma;
public class TurmaBean {
private EntityManagerFactory factory = Persistence
.createEntityManagerFactory("CadastroAlunos");
private Turma turma = new Turma();
public Turma getTurma() {
return turma;
}
public void setTurma(Turma turma) {
this.turma = turma;
}
public ArrayList<Turma> getTurmas() {
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Query q = em.createQuery("select t from Turma t");
@SuppressWarnings("unchecked")
ArrayList<Turma> turmas = (ArrayList<Turma>) q.getResultList();
em.getTransaction().commit();
em.close();
return turmas;
}
}
novoAluno.xhtml
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:form id="formulario">
<h:panelGrid columns="3">
<h:outputLabel value="Nome" />
<h:inputText value="#{alunoBean.aluno.nome}" id="nome" label="Nome" />
<h:message for="nome" />
<h:outputLabel value="Turma" />
<h:selectOneMenu value="#{alunoBean.aluno.turma}" id="turma"
label="Turma">
<f:selectItems value="#{turmaBean.turmas}" var="t"
itemValue="#{t}" itemLabel="#{t.nome}" />
</h:selectOneMenu>
<h:message for="turma" />
<h:commandButton value="Salvar Aluno" action="#{alunoBean.salvaAluno}" />
</h:panelGrid>
</h:form>
</html>