bom dia,
estou tentando desenvolver um projeto, tenho 2 classes competidor e ocupacao cada uma com seus respectivos atributos. Fiz o mapeamento creio que corretamente utilizando as classes bean no arquivo xhtml. O hibernate cria as tabelas no banco e adiciona uma ocupacao mas ao tentar cadastrar um competidor gera o erro abaixo.
E não consigo mais realizar o cadastro nem de competidor nem de ocupação.
saída do console
ADVERTÊNCIA: #{competidorBean.gravar}: javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: [b]could not read a hi value - you need to populate the table: hibernate_sequence[/b]
javax.faces.FacesException: #{competidorBean.gravar}: javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: could not read a hi value - you need to populate the table: hibernate_sequence
classe competidor
package br.com.senai.modelo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Competidor {
@Id
@GeneratedValue
private Integer idCompetidor;
private String nome;
private String sobrenome;
private String ocupacao;
private String idade;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSobrenome() {
return sobrenome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
public String getOcupacao() {
return ocupacao;
}
public void setOcupacao(String ocupacao) {
this.ocupacao = ocupacao;
}
public String getMembro() {
return membro;
}
public void setMembro(String membro) {
this.membro = membro;
}
private String membro;
public Integer getIdCompetidor() {
return idCompetidor;
}
public void setIdCompetidor(Integer idCompetidor) {
this.idCompetidor = idCompetidor;
}
public String getIdade() {
return idade;
}
public void setIdade(String idade) {
this.idade = idade;
} }
classe DAO
package br.com.senai.controle;
import javax.persistence.EntityManager;
public class OlimpiadaDAO<T> {
private final Class<T> classe;
public OlimpiadaDAO(Class<T> classe) {
this.classe = classe;
}
public void adiciona(T t) {
// recupera o EntityManager
EntityManager em = new OlimpiadaUtil().getEntityManager();
// abre a transacao
em.getTransaction().begin();
em.persist(t);
em.getTransaction().commit();
// fecha a entity manager
em.close();
}
}
[b]classe Util[/b]
package br.com.senai.controle;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class OlimpiadaUtil {
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("olimpiada");
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
public void close(EntityManager em){
em.close();
}
}
arquivo competidor.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://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>Cadastro de Competidor</title>
</h:head>
<h:body>
<h:form>
<fieldset>
<legend>Cadastro de Competidor</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Nome" for="nome" />
<h:inputText id="nome" value="#{competidorBean.competidor.nome}" />
<h:outputLabel value="Sobrenome" for="sobrenome" />
<h:inputText id="sobrenome" value="#{competidorBean.competidor.sobrenome}" />
<h:outputLabel value="Ocupacao" for="ocupacao" />
<h:inputText id="ocupacao" value="#{competidorBean.competidor.ocupacao}" />
<h:outputLabel value="Idade" for="idade" />
<h:inputText id="idade" value="#{competidorBean.competidor.idade}" />
<h:commandButton value="Cadastrar" action="#{competidorBean.gravar}" />
</h:panelGrid>
</fieldset>
</h:form>
</h:body>
</html>
arquivo ocupacao.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://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>Cadastro de Ocupações</title>
</h:head>
<h:body>
<h:form>
<fieldset>
<legend>Cadastro de Ocupação</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Nome" for="nome" />
<h:inputText id="nome" value="#{ocupacaoBean.ocupacao.nome}" />
<h:outputLabel value="Número" for="numero" />
<h:inputText id="numero" value="#{ocupacaoBean.ocupacao.numero}" />
<h:commandButton value="Cadastrar" action="#{ocupacaoBean.gravar}" />
</h:panelGrid>
</fieldset>
</h:form>
</h:body>
</html>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="olimpiada" >
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>br.com.senai.modelo.Ocupacao</class>
<class>br.com.senai.modelo.Competidor</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/bdolimpiada" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="root" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
</properties>
</persistence-unit>
</persistence>