Solucionado (ver solução)
Solucionado
(ver solução)
14
respostas

Minha classe de teste persiste os dados no meu banco postgres mas meu xhtml não persiste.

Meu problema é que quando eu clico no button Gravar, o programa não persiste os dados no banco. Todavia, quando executo minha classe de testes ele grava. Queria saber qual o problema?

Estou expondo algo do meu código e do meu projeto aqui e o restante se encontra-se em meu git. Caso prefira acessar o código lá, apenas me informe seu nome no bitbucket, pois meu git está muito porco para eu expô-lo. kkkkkk

Primeiramente segue a estrutura do meu projeto:

C:.
├───.git
│   ├───hooks
│   ├───info
│   ├───logs
│   │   └───refs
│   │       ├───heads
│   │       └───remotes
│   │           └───origin
│   ├───objects
│   │   ...
│   │   ├───info
│   │   └───pack
│   └───refs
│       ├───heads
│       ├───remotes
│       │   └───origin
│       └───tags
├───.settings
├───src
│   ├───main
│   │   ├───java
│   │   │   ├───controller
│   │   │   ├───dao
│   │   │   └───model
│   │   ├───resources
│   │   │   └───META-INF
│   │   └───webapp
│   │       ├───css
│   │       └───WEB-INF
│   │           └───lib
│   └───test
│       ├───java
│       └───resources
│           └───META-INF
└───target
    ├───classes
    │   ├───controller
    │   ├───css
    │   ├───dao
    │   ├───META-INF
    │   ├───model
    │   └───WEB-INF
    │       └───lib
    ├───m2e-wtp
    │   └───web-resources
    │       └───META-INF
    │           └───maven
    │               └───br.sp.saopaulo.cortina.home
    │                   └───ProjetoWeb
    └───test-classes
        └───META-INF

Segue o código da minha classe Cidadão:

package model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.apache.log4j.Logger;

@Entity
public class Cidadao extends Pessoa {

    private static Logger logger = Logger.getLogger(Cidadao.class);

}

Segue o código da minha classe Pessoa:

package model;

import javax.persistence.*;

@Entity
public abstract class Pessoa {

    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;
    private String nome;
    private String cpf;
    private String municipio;
    private String endereco;
    private String cep;


    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCpf() {
        return cpf;
    }
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    public String getMunicipio() {
        return municipio;
    }
    public void setMunicipio(String municipio) {
        this.municipio = municipio;
    }
    public String getEndereco() {
        return endereco;
    }
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }
    public String getCep() {
        return cep;
    }
    public void setCep(String cep) {
        this.cep = cep;
    }

}

Segue o código da minha classe de testes:

import javax.persistence.EntityManager;
import dao.JPAUtil;
import model.Cidadao;


public class CidadaoTeste {

    public static void main(String[] args) {

        Cidadao cidadao = new Cidadao();
        cidadao.setNome("Enzo Seraphim");
        cidadao.setCep("05677888");
        cidadao.setCpf("09888777890");
        cidadao.setEndereco("Avenida Faria Dutra");
        cidadao.setMunicipio("Sorocaba");

        EntityManager em = new JPAUtil().getEntityManager();

        em.getTransaction().begin();
        em.persist(cidadao);

        em.getTransaction().commit();
        em.close();

    }

}

Segue o código da minha classe JPAUtil:

package dao;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class JPAUtil {

    private static EntityManagerFactory emf = Persistence
            .createEntityManagerFactory("sports_city_manager");

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void close(EntityManager em) {
        em.close();
    }
}

Minha classe DAO é exatamente igual a de vocês.

Meu arquivo pom.xml (Estou usando MAVEN):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>br.sp.saopaulo.cortina.home</groupId>
    <artifactId>ProjetoWeb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <dependencies>
        <!-- JBoss Maven <dependency> <groupId>org.jboss.as.plugins</groupId> <artifactId>jboss-as-maven-plugin</artifactId> 
            <version>7.7.Final</version> <type>maven-plugin</type> </dependency> -->

        <!-- Log4J para fazer log no servidor -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!-- JSF Mojarra -->
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.faces</artifactId>
            <version>2.2.0</version>
        </dependency>

        <!-- PrimeFaces -->
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>5.3</version>
        </dependency>

        <!-- Hibernate -->

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.2.Final</version>
        </dependency>

        <!-- PostgreSQL -->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901-1.jdbc4</version>
        </dependency>


    </dependencies>
</project>

Meu arquivo 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="sports_city_manager"
        transaction-type="RESOURCE_LOCAL">

        <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <class>model.Cidadao</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
            <property name="javax.persistence.jdbc.url"
                value="jdbc:postgresql://localhost:5433/webproject_hibernate_db"></property>
            <property name="javax.persistence.jdbc.user" value="dsbonafe" />
            <property name="javax.persistence.jdbc.password" value="admin" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.shutdown" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
        </properties>

    </persistence-unit>

</persistence>

Por fim, meu 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:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">
<head>
<title>Cidadão</title>
</head>
<body>
    <fieldset>
        <legend>Cadastro do cidadão</legend>
        <h:outputLabel value="Nome do cidadão: " for="nomeDoCidadao" />
        <h:inputText id="nomeDoCidadao" value="#{cidadaoBean.cidadao.nome}" />
        <h:outputLabel value="CPF: " for="cpf" />
        <h:inputText id="cpf" value="#{cidadaoBean.cidadao.cpf}"/>
        <h:outputLabel value="Município: " for="municipio" />
        <h:inputText value="#{cidadaoBean.cidadao.municipio}" id="municipio" />
        <h:outputLabel value="Endereço: " for="endereco" />
        <h:inputText value="#{cidadaoBean.cidadao.endereco}" id="endereco"/>
        <h:outputLabel value="C.E.P.:  " for="cep" />
        <h:inputText value="#{cidadaoBean.cidadao.cep}" id="cep" />
        <h:button value="Gravar" type="graver" action="#{cidadaoBean.gravar}" />

    </fieldset>
</body>
</html>
14 respostas

Oi Douglas,

E sua classe bean com o método gravar?

Opa, desculpe!

package controller;

import javax.faces.bean.ManagedBean;

import dao.DAO;
import model.Cidadao;

@ManagedBean
public class CidadaoBean {

    private Cidadao cidadao = new Cidadao();

    public Cidadao getCidadao() {
        return this.cidadao;
    }

    public void gravar(){
        System.out.println("Gravando cidadão " + cidadao.getNome() + " no banco de dados.");
        new DAO<Cidadao>(Cidadao.class).adiciona(this.cidadao);
        System.out.println("Cidadão " + cidadao.getNome() + " gravado no banco.");
    }
}

Ah nem precisava, não prestei atenção antes, mas parece que seu xhtml não contem a tag form, é necessária em formularios, e também verifique se a tag h:button é a correta para realizar o submit do formulario.

Vou fazer isso agora. Dois minutinhos.

Agora retornou-me um monte de erros:


ADVERTÊNCIA: #{cidadaoBean.gravar}: java.lang.ExceptionInInitializerError
javax.faces.FacesException: #{cidadaoBean.gravar}: java.lang.ExceptionInInitializerError
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javax.faces.el.EvaluationException: java.lang.ExceptionInInitializerError
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    ... 23 more
Caused by: java.lang.ExceptionInInitializerError
    at dao.DAO.adiciona(DAO.java:19)
    at controller.CidadaoBean.gravar(CidadaoBean.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 24 more
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: sports_city_manager] Unable to build Hibernate SessionFactory
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:877)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:805)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at dao.JPAUtil.<clinit>(JPAUtil.java:10)
    ... 34 more
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Unable to execute schema management to JDBC target [create table Pessoa (DTYPE varchar(31) not null, id int8 not null, cep varchar(255), cpf varchar(255), endereco varchar(255), municipio varchar(255), nome varchar(255), primary key (id))]
    at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:59)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlString(SchemaMigratorImpl.java:420)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings(SchemaMigratorImpl.java:409)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.createTable(SchemaMigratorImpl.java:230)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigrationToTargets(SchemaMigratorImpl.java:167)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:60)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:129)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:97)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:481)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
    ... 38 more
Caused by: org.postgresql.util.PSQLException: ERROR: relation "pessoa" already exists
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:302)
    at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:56)
    ... 48 more

nov 14, 2015 8:02:27 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/ProjetoWeb] threw exception [java.lang.ExceptionInInitializerError] with root cause
org.postgresql.util.PSQLException: ERROR: relation "pessoa" already exists
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:302)
    at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:56)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlString(SchemaMigratorImpl.java:420)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings(SchemaMigratorImpl.java:409)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.createTable(SchemaMigratorImpl.java:230)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigrationToTargets(SchemaMigratorImpl.java:167)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:60)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:129)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:97)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:481)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at dao.JPAUtil.<clinit>(JPAUtil.java:10)
    at dao.DAO.adiciona(DAO.java:19)
    at controller.CidadaoBean.gravar(CidadaoBean.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Meu novo xhtml mais bonitinho:

<!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:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">
<head>
<title>Cidadão</title>
</head>
<body>
    <h:form>
        <fieldset>
            <legend>Cadastro do cidadão</legend>
            <h:panelGrid columns="2">
                <h:outputLabel value="Nome do cidadão: " for="nomeDoCidadao" />
                <h:inputText id="nomeDoCidadao" value="#{cidadaoBean.cidadao.nome}" />
                <h:outputLabel value="CPF: " for="cpf" />
                <h:inputText id="cpf" value="#{cidadaoBean.cidadao.cpf}" />
                <h:outputLabel value="Município: " for="municipio" />
                <h:inputText value="#{cidadaoBean.cidadao.municipio}" id="municipio" />
                <h:outputLabel value="Endereço: " for="endereco" />
                <h:inputText value="#{cidadaoBean.cidadao.endereco}" id="endereco" />
                <h:outputLabel value="C.E.P.:  " for="cep" />
                <h:inputText value="#{cidadaoBean.cidadao.cep}" id="cep" />
                <h:commandButton value="Gravar" action="#{cidadaoBean.gravar}" />
            </h:panelGrid>
        </fieldset>
    </h:form>
</body>
</html>

Você esta utilizando o PostgreSQL correto? Em vez de utilizar AUTO no strategy, utilize GENERATE apague as tabelas e crie de novo.

Vejo que você esta utilizando herança, você conhece o procedimento para o mapeamento correto?

Por que em seu teste você esta deixando explicito para ele persistir diretamente o Cidado, o que pode acontecer da persistencia incluir outros relacionamentos se necessário, porém em seu DAO, não tenho certeza se isso aconteceria.

Compreendo. Qual seria o procedimento correto para mapear herança? Eu pensei que seria colocar apenas o @Entity nas classes e tomar cuidado para não repetir @Id nas classes filhas. Teria algum link para me indicar?

Não há GENERATED. Tem IDENTITY, SEQUENCE, TABLE, e o AUTO.

Erro meu, é SEQUENCE.

Depende de como será sua regra de negócio.

Aqui tem um material muito bom, dê uma olhada http://uaihebert.com/jpa-mini-livro-primeiros-passos-e-conceitos-detalhados/

Olha... agora... fazendo as mudanças, o Tomcat não retorna erro, mas ainda não é persistido. Veja o que alterei:

1) O mapeamento da heança:

package model;

import javax.persistence.*;

@Entity  
@Table(name = "pessoa000")  
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)  
@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)    
public abstract class Pessoa {

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id;
    private String nome;
    private String cpf;
    private String municipio;
    private String endereco;
    private String cep;


    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCpf() {
        return cpf;
    }
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    public String getMunicipio() {
        return municipio;
    }
    public void setMunicipio(String municipio) {
        this.municipio = municipio;
    }
    public String getEndereco() {
        return endereco;
    }
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }
    public String getCep() {
        return cep;
    }
    public void setCep(String cep) {
        this.cep = cep;
    }

}

Minha classe Cidadao:

package model;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.apache.log4j.Logger;

@Entity  
@DiscriminatorValue("cidadao")  
public class Cidadao extends Pessoa {

    private static Logger logger = Logger.getLogger(Cidadao.class);

}

O retorno do Tomcat:

nov 14, 2015 8:36:46 PM org.apache.catalina.core.AprLifecycleListener init
INFORMAÇÕES: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.8.0_51\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jdk1.8.0_51/bin/../jre/bin/server;C:/Program Files/Java/jdk1.8.0_51/bin/../jre/bin;C:/Program Files/Java/jdk1.8.0_51/bin/../jre/lib/amd64;C:\Python27\;C:\Python27\Scripts;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Users\dougl\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\Java\jdk1.8.0_51\bin;C:\Program Files\Java\jre1.8.0_51\bin;C:\Program Files\7-Zip;C:\Program Files (x86)\Google\Chrome\Application;C:\Program Files (x86)\Windows Phone TShell;C:\cygwin64\bin;C:\Program Files\MATLAB\R2011a\runtime\win64;C:\Program Files\MATLAB\R2011a\bin;C:\Cadence\SPB_16.3\tools\bin;C:\Cadence\SPB_16.3\tools\libutil\bin;C:\Cadence\SPB_16.3\tools\fet\bin;C:\Cadence\SPB_16.3\tools\pcb\bin;C:\Cadence\SPB_16.3\tools\specctra\bin;C:\Cadence\SPB_16.3\tools\PSpice;C:\Cadence\SPB_16.3\tools\PSpice\Library;C:\Cadence\SPB_16.3\tools\Capture;C:\Cadence\SPB_16.3\OpenAccess\bin\win32\opt;C:\Program Files\MiKTeX 2.9\miktex\bin\x64;C:\Program Files (x86)\LyX 2.1\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Jenkins;C:\Program Files\Java\jdk1.8.0_60\bin;C:\Users\dougl\.dnx\bin;C:\ProgramData\chocolatey\bin;C:\PostgreSQL\bin;C:\Users\dougl\AppData\Roaming\npm;C:\Users\dougl\AppData\Local\atom\bin;C:\Program Files\Docker Toolbox;C:\Program Files (x86)\Nmap;C:\ECLIPSE\eclipse;;.
nov 14, 2015 8:36:46 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
ADVERTÊNCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:ProjetoWeb' did not find a matching property.
nov 14, 2015 8:36:46 PM org.apache.coyote.AbstractProtocolHandler init
INFORMAÇÕES: Initializing ProtocolHandler ["http-bio-18080"]
nov 14, 2015 8:36:46 PM org.apache.coyote.AbstractProtocolHandler init
INFORMAÇÕES: Initializing ProtocolHandler ["ajp-bio-18009"]
nov 14, 2015 8:36:46 PM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Initialization processed in 1087 ms
nov 14, 2015 8:36:46 PM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service Catalina
nov 14, 2015 8:36:46 PM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/7.0.12
nov 14, 2015 8:36:47 PM org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFORMAÇÕES: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [140] milliseconds.
nov 14, 2015 8:36:48 PM com.sun.faces.config.ConfigureListener contextInitialized
INFORMAÇÕES: Inicializando Mojarra 2.2.0 ( 20130502-2118 https://svn.java.net/svn/mojarra~svn/tags/2.2.0@11930) para o contexto '/ProjetoWeb'
nov 14, 2015 8:36:48 PM com.sun.faces.spi.InjectionProviderFactory createInstance
INFORMAÇÕES: JSF1048: Anotações PostConstruct/PreDestroy presentes.  Os métodos ManagedBeans marcados com essas anotações informarão as anotações processadas.
nov 14, 2015 8:36:50 PM org.primefaces.webapp.PostConstructApplicationEventListener processEvent
INFORMAÇÕES: Running on PrimeFaces 5.3
nov 14, 2015 8:36:50 PM org.apache.coyote.AbstractProtocolHandler start
INFORMAÇÕES: Starting ProtocolHandler ["http-bio-18080"]
nov 14, 2015 8:36:50 PM org.apache.coyote.AbstractProtocolHandler start
INFORMAÇÕES: Starting ProtocolHandler ["ajp-bio-18009"]
nov 14, 2015 8:36:50 PM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in 3759 ms
Gravando cidadão manuel no banco de dados.
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate: 
    insert 
    into
        pessoa000
        (cep, cpf, endereco, municipio, nome, type) 
    values
        (?, ?, ?, ?, ?, 'cidadao')
Hibernate: 
    select
        currval('pessoa000_id_seq')
Cidadão manuel gravado no banco.

Daí tentei subir com JBoss para ver se ele tem um debug melhor, mas não adiantou. Saiu um erro muito louco...

nov 14, 2015 8:36:46 PM org.apache.catalina.core.AprLifecycleListener init
INFORMAÇÕES: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.8.0_51\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jdk1.8.0_51/bin/../jre/bin/server;C:/Program Files/Java/jdk1.8.0_51/bin/../jre/bin;C:/Program Files/Java/jdk1.8.0_51/bin/../jre/lib/amd64;C:\Python27\;C:\Python27\Scripts;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Users\dougl\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\Java\jdk1.8.0_51\bin;C:\Program Files\Java\jre1.8.0_51\bin;C:\Program Files\7-Zip;C:\Program Files (x86)\Google\Chrome\Application;C:\Program Files (x86)\Windows Phone TShell;C:\cygwin64\bin;C:\Program Files\MATLAB\R2011a\runtime\win64;C:\Program Files\MATLAB\R2011a\bin;C:\Cadence\SPB_16.3\tools\bin;C:\Cadence\SPB_16.3\tools\libutil\bin;C:\Cadence\SPB_16.3\tools\fet\bin;C:\Cadence\SPB_16.3\tools\pcb\bin;C:\Cadence\SPB_16.3\tools\specctra\bin;C:\Cadence\SPB_16.3\tools\PSpice;C:\Cadence\SPB_16.3\tools\PSpice\Library;C:\Cadence\SPB_16.3\tools\Capture;C:\Cadence\SPB_16.3\OpenAccess\bin\win32\opt;C:\Program Files\MiKTeX 2.9\miktex\bin\x64;C:\Program Files (x86)\LyX 2.1\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Jenkins;C:\Program Files\Java\jdk1.8.0_60\bin;C:\Users\dougl\.dnx\bin;C:\ProgramData\chocolatey\bin;C:\PostgreSQL\bin;C:\Users\dougl\AppData\Roaming\npm;C:\Users\dougl\AppData\Local\atom\bin;C:\Program Files\Docker Toolbox;C:\Program Files (x86)\Nmap;C:\ECLIPSE\eclipse;;.
nov 14, 2015 8:36:46 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
ADVERTÊNCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:ProjetoWeb' did not find a matching property.
nov 14, 2015 8:36:46 PM org.apache.coyote.AbstractProtocolHandler init
INFORMAÇÕES: Initializing ProtocolHandler ["http-bio-18080"]
nov 14, 2015 8:36:46 PM org.apache.coyote.AbstractProtocolHandler init
INFORMAÇÕES: Initializing ProtocolHandler ["ajp-bio-18009"]
nov 14, 2015 8:36:46 PM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Initialization processed in 1087 ms
nov 14, 2015 8:36:46 PM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service Catalina
nov 14, 2015 8:36:46 PM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/7.0.12
nov 14, 2015 8:36:47 PM org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFORMAÇÕES: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [140] milliseconds.
nov 14, 2015 8:36:48 PM com.sun.faces.config.ConfigureListener contextInitialized
INFORMAÇÕES: Inicializando Mojarra 2.2.0 ( 20130502-2118 https://svn.java.net/svn/mojarra~svn/tags/2.2.0@11930) para o contexto '/ProjetoWeb'
nov 14, 2015 8:36:48 PM com.sun.faces.spi.InjectionProviderFactory createInstance
INFORMAÇÕES: JSF1048: Anotações PostConstruct/PreDestroy presentes.  Os métodos ManagedBeans marcados com essas anotações informarão as anotações processadas.
nov 14, 2015 8:36:50 PM org.primefaces.webapp.PostConstructApplicationEventListener processEvent
INFORMAÇÕES: Running on PrimeFaces 5.3
nov 14, 2015 8:36:50 PM org.apache.coyote.AbstractProtocolHandler start
INFORMAÇÕES: Starting ProtocolHandler ["http-bio-18080"]
nov 14, 2015 8:36:50 PM org.apache.coyote.AbstractProtocolHandler start
INFORMAÇÕES: Starting ProtocolHandler ["ajp-bio-18009"]
nov 14, 2015 8:36:50 PM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in 3759 ms
Gravando cidadão manuel no banco de dados.
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate: 
    insert 
    into
        pessoa000
        (cep, cpf, endereco, municipio, nome, type) 
    values
        (?, ?, ?, ?, ?, 'cidadao')
Hibernate: 
    select
        currval('pessoa000_id_seq')
Cidadão manuel gravado no banco.
solução!

Erro? Ele não foi inserido?

Agora que coloquei como SEQUENCE foi inserido. Antes não tinha sido. Por que essa estratégia é necessária?

Obrigado pela ajuda chará!!!

SEQUENCE é um generator que faz o trabalho de auto incremento no id, a escolha que cada banco de dados fez ao utilizar certa tecnologia, não sei te falar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software