Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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.