Problema para salvar no Hibernate + Primefaces

Bom, eu estou pesquisando muito sobre uma tela crud com Primafaces e usando Hibernate, olhei os padrões MVC. Consultei várias apostilas da Caelum, K19, AlgaWorks e não conseguir incluir o registro na tabela. Assim decidi postar minha duvida aqui.

Vou postar o código e ele não apresenta nenhum erro no console.

Este é o pacote DAO.

[code]package dao;

import util.HibernateUtil;
import controle.*;
import java.util.List;
import model.Atestado;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

/**
*

  • @author IPASI
    */
    public class AtestadoDAO {

    Atestado atestado = new Atestado();

    public Atestado getAtestado() {
    return atestado;
    }

    public void setAtestado(Atestado atestado) {
    this.atestado = atestado;
    }

    public void Salva(Atestado atestado) {
    Session session = HibernateUtil.getSession();
    Transaction trans = session.beginTransaction();
    session.save(atestado);
    trans.commit();

    }

    public void Deleta(Atestado atestado) {
    Session session = HibernateUtil.getSession();
    Transaction trans = session.beginTransaction();

     session.delete(atestado);
     trans.commit();
    

    }

    public void Altera(Atestado atestado) {
    Session session = HibernateUtil.getSession();
    Transaction trans = session.beginTransaction();
    session.update(atestado);
    trans.commit();
    }

    public Atestado PesquisaCod() {
    Session session = HibernateUtil.getSession();
    try {
    return (Atestado) session.get(Atestado.class, atestado.getAtestadoPK().getIdAtestado());
    } finally {
    session.close();
    }
    }

    public List PesquisaPeriodo() {

     Session session = HibernateUtil.getSession();
     Criteria criteria = session.createCriteria(Atestado.class);
     List<Atestado> lista = criteria.add(Restrictions.between("Pesquisa_Periodo", atestado.getDatainicio(), atestado.getDatafim())).list();
     session.close();
     return lista;
    

    }

}[/code]

Controle


package controle;

import dao.*;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import model.Atestado;

/**
 *
 * @author IPASI
 */
public class AtestadoControle {

    private Atestado atestado;

    public Atestado getAtestado() {
        return atestado;
    }

    public void setAtestado(Atestado atestado) {
        this.atestado = atestado;
    }

    public String Salva(ActionEvent evento) {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            new AtestadoDAO().Salva(atestado);
            FacesMessage msg = new FacesMessage(
                    "atestado salva com sucesso!");
            msg.setSeverity(FacesMessage.SEVERITY_INFO);
            context.addMessage(null, msg);
            atestado = new Atestado();
        } catch (Exception e) {
            e.printStackTrace();
            FacesMessage msg = new FacesMessage(
                    "Erro inesperado ao salvar conta!");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage(null, msg);
        }
        return null;
    }

    public String Altera(ActionEvent evento) {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            new AtestadoDAO().Salva(atestado);
            FacesMessage msg = new FacesMessage(
                    "atestado salva com sucesso!");
            msg.setSeverity(FacesMessage.SEVERITY_INFO);
            context.addMessage(null, msg);
        } catch (Exception e) {
            e.printStackTrace();
            FacesMessage msg = new FacesMessage(
                    "Erro inesperado ao salvar conta!");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage(null, msg);
        }
        return null;
    }

    public String PesquisaNome() {
        return null;
    }

    public String PesquisaCod() {
        return null;
    }

    public String PesquisaPeriodo() {
        return null;
    }

    public String Delete(ActionEvent evento) {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            new AtestadoDAO().Salva(atestado);
            FacesMessage msg = new FacesMessage(
                    "atestado salva com sucesso!");
            msg.setSeverity(FacesMessage.SEVERITY_INFO);
            context.addMessage(null, msg);
        } catch (Exception e) {
            e.printStackTrace();
            FacesMessage msg = new FacesMessage(
                    "Erro inesperado ao salvar conta!");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage(null, msg);
        }
        return null;
    }

    public String Imprimir() {
        return null;
    }

    public String Relatorio() {
        return null;
    }
}

Este é o Modelo

[code]package model;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
*

  • @author jon
    */
    @Entity
    @Table(name = “atestado”)
    @XmlRootElement
    @NamedQueries({
    @NamedQuery(name = “Atestado.findAll”, query = “SELECT a FROM Atestado a”),
    @NamedQuery(name = “Atestado.findByIdAtestado”, query = “SELECT a FROM Atestado a WHERE a.atestadoPK.idAtestado = :idAtestado”),
    @NamedQuery(name = “Atestado.findByDatainicio”, query = “SELECT a FROM Atestado a WHERE a.datainicio = :datainicio”),
    @NamedQuery(name = “Atestado.findByDatafim”, query = “SELECT a FROM Atestado a WHERE a.datafim = :datafim”),
    @NamedQuery(name = “Atestado.findByHora”, query = “SELECT a FROM Atestado a WHERE a.hora = :hora”),
    @NamedQuery(name = “Atestado.findByObservacao”, query = “SELECT a FROM Atestado a WHERE a.observacao = :observacao”),
    @NamedQuery(name = “Atestado.findByFuncionarioidFuncionario”, query = “SELECT a FROM Atestado a WHERE a.atestadoPK.funcionarioidFuncionario = :funcionarioidFuncionario”)})
    public class Atestado implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected AtestadoPK atestadoPK;
    @Column(name = “datainicio”)
    @Temporal(TemporalType.DATE)
    private Date datainicio;
    @Column(name = “datafim”)
    @Temporal(TemporalType.DATE)
    private Date datafim;
    @Column(name = “hora”)
    @Temporal(TemporalType.TIME)
    private Date hora;
    @Size(max = 400)
    @Column(name = “observacao”,nullable=true)
    private String observacao;

    public Atestado() {
    }

    public Atestado(AtestadoPK atestadoPK) {
    this.atestadoPK = atestadoPK;
    }

    public Atestado(long idAtestado, long funcionarioidFuncionario) {
    this.atestadoPK = new AtestadoPK(idAtestado, funcionarioidFuncionario);
    }

    public AtestadoPK getAtestadoPK() {
    return atestadoPK;
    }

    public void setAtestadoPK(AtestadoPK atestadoPK) {
    this.atestadoPK = atestadoPK;
    }

    public Date getDatainicio() {
    return datainicio;
    }

    public void setDatainicio(Date datainicio) {
    this.datainicio = datainicio;
    }

    public Date getDatafim() {
    return datafim;
    }

    public void setDatafim(Date datafim) {
    this.datafim = datafim;
    }

    public Date getHora() {
    return hora;
    }

    public void setHora(Date hora) {
    this.hora = hora;
    }

    public String getObservacao() {
    return observacao;
    }

    public void setObservacao(String observacao) {
    this.observacao = observacao;
    }

    @Override
    public int hashCode() {
    int hash = 0;
    hash += (atestadoPK != null ? atestadoPK.hashCode() : 0);
    return hash;
    }

    @Override
    public boolean equals(Object object) {
    // TODO: Warning - this method won’t work in the case the id fields are not set
    if (!(object instanceof Atestado)) {
    return false;
    }
    Atestado other = (Atestado) object;
    if ((this.atestadoPK == null && other.atestadoPK != null) || (this.atestadoPK != null && !this.atestadoPK.equals(other.atestadoPK))) {
    return false;
    }
    return true;
    }

    @Override
    public String toString() {
    return “Entidades.Atestado[ atestadoPK=” + atestadoPK + " ]";
    }

}
[/code]

package model;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.validation.constraints.NotNull;

/**
 *
 * @author jon
 */
@Embeddable
public class AtestadoPK implements Serializable {
    @Basic(optional = false)
    @NotNull
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name = "idAtestado")
    private long idAtestado;
    @Basic(optional = false)
    @NotNull
    @Column(name = "Funcionario_idFuncionario")
    private long funcionarioidFuncionario;

    public AtestadoPK() {
    }

    public AtestadoPK(long idAtestado, long funcionarioidFuncionario) {
        this.idAtestado = idAtestado;
        this.funcionarioidFuncionario = funcionarioidFuncionario;
    }

    public long getIdAtestado() {
        return idAtestado;
    }

    public void setIdAtestado(long idAtestado) {
        this.idAtestado = idAtestado;
    }

    public long getFuncionarioidFuncionario() {
        return funcionarioidFuncionario;
    }

    public void setFuncionarioidFuncionario(long funcionarioidFuncionario) {
        this.funcionarioidFuncionario = funcionarioidFuncionario;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (int) idAtestado;
        hash += (int) funcionarioidFuncionario;
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof AtestadoPK)) {
            return false;
        }
        AtestadoPK other = (AtestadoPK) object;
        if (this.idAtestado != other.idAtestado) {
            return false;
        }
        if (this.funcionarioidFuncionario != other.funcionarioidFuncionario) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Entidades.AtestadoPK[ idAtestado=" + idAtestado + ", funcionarioidFuncionario=" + funcionarioidFuncionario + " ]";
    }
    
}

A parte do codigo que insere.


        <h:form>
            <pou:fieldset id="NovoAtes" toggleable="true" legend="Cadastra Atestado">
                <h:panelGrid id="InsAtestado" style="margin-bottom:10px"> 


                    <h:outputLabel for="NomeAtestIns" value="Nome"/>
                    <pou:inputText id="NameAtestIns" required="true" value="#{AtestadoBean.atestado.atestadoPK.funcionarioidFuncionario}" />                  

                    <h:outputLabel for="HoraAtesIns" value="Nome"/>
                    <pou:inputText id="HoraAtesIns" required="true" value="#{AtestadoBean.atestado.atestado.hora}" />            

                    <h:outputLabel for="DataInicialIns" value="Data Inicial"/>
                    <pou:calendar id="DataInicialIns" pattern="dd/MM/yyyy" required="true" value="#{AtestadoBean.atestado.datainicio}"/>

                    <h:outputLabel for="DataFinalIns" value="Data Final"/>
                    <pou:calendar id="DataFinalIns" pattern="dd/MM/yyyy" required="true" value="#{AtestadoBean.atestado.datafim}" />

                    <h:outputLabel for="ObsAtestadoIns" value="Observação" />
                    <pou:inputTextarea id="ObsAtestadoIns" value="#{AtestadoBean.atestado.observacao}" />

                    <pou:commandButton id="Salvar" value="Salvar" actionListener="#{AtestadoBean.salva}"/> 

                </h:panelGrid>
            </pou:fieldset>
        </h:form>

Antes que me perguntem eu já criei o BD e as tabelas também.

Persistencia


<?xml version="1.0" encoding="UTF-8"?>
<!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="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ponto</property>
    <property name="hibernate.connection.username">root</property>
    <mapping class="model.Atestado"/>
  </session-factory>
</hibernate-configuration>

Faces- config

[code]?xml version=‘1.0’ encoding=‘UTF-8’?>



AtestadoBean
controle.AtestadoControle
request


Estou fazendo o projeto no netbeans e claro tem mais coisas, eu sei que tenho que melhorar o código, mas queria saber o possível erro já que eu já um segui os procedimentos em tutorias e video-aulas.

Já adicionei a biblioteca do Primafaces 3.0 e do mysql. 1.5.18.

Obrigado pela atenção.

Debugando ele chega a passa pelo mentodo da sua classe DAO pra grava os registros?

eu já tive um problema igual a este…
quando fui debugar o botão não estava chamando o método no MB
resultado, coloquei o código ajax=“false” dentro do commandButton e resolveu =)

Vou pesquisar e talvez sirva pra alguém também, muito obrigado pela atenção.

Advertência: RAR5038:Unexpected exception while creating resource for pool mysql_Ponto_rootPool. Exception : javax.resource.spi.ResourceAllocationException: Connection could not be allocated because: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Advertência: RAR5117 : Failed to obtain/create connection from connection pool [ mysql_Ponto_rootPool ]. Reason : com.sun.appserv.connectors.internal.api.PoolingException: Connection could not be allocated because: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Advertência: RAR5114 : Error allocating connection : [Error in allocating a connection. Cause: Connection could not be allocated because: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.]
Advertência: Could not obtain connection metadata

Advertência: Não foi possível encontrar o componente com a ID NomeAtestIns na exibição.
Advertência: Não foi possível encontrar o componente com a ID NomeAtestAlt na exibição.

Erros que parecem ser consideráveis, estou pesquisando na net sobre isso

eu já tive um problema igual a este…
quando fui debugar o botão não estava chamando o método no MB
resultado, coloquei o código ajax=“false” dentro do commandButton e resolveu =)

Obrigado. Mas deu um erro

/Atestado.xhtml @33,124 value="#{AtestadoBean.atestado.atestadoPK.funcionarioidFuncionario}": Target Unreachable, ‘null’ returned null

Pelo que pesquisei tenho que desenvolver um construtor no ManagedBean. Estou tentando aqui, mas muito obrigado, viu. :slight_smile:

você instanciou o objeto?

seria algo do tipo:

Atestado atestado = new Atestado();

http://javafree.uol.com.br/topic-858999-Problemas-com-JSF-+-Backing-Bean.html

Fiz igualmente aqui, eu coloquei no MB, mas continua o problema

/Atestado.xhtml @33,141 value="#{AtestadoBean.atestado.atestadoPK.funcionarioidFuncionario}": Target Unreachable, ‘null’ returned null

Parece que o problema é no relacionamento entre tabelas entre funcionário e ateastado

private AtestadoPK f = new AtestadoPK();

Cheguei até colocar isso no MB e nem deu.