Duvidas com JSF

Ola pessoal estou fazendo um cadastro simples de cliente.
ele da o sequinte erro ao clicar em inserir cliente:

GRAVE: java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
javax.faces.event.AbortProcessingException: java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
        at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:182)
        at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
        at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:772)
        at javax.faces.component.UICommand.broadcast(UICommand.java:300)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
        at org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:40)
        at org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:23)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
        at Dao.ClienteDaoImpl.save(ClienteDaoImpl.java:23)
        at controller.ClienteController.adicionarCliente(ClienteController.java:67)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
        at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
        at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)
        ... 24 more

Segue o codigo

modelo

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 *
 * @author Fred
 */
@Entity
@Table(name="cliente")
public class Cliente implements Serializable {
    @Id
    @GeneratedValue
    private Long id;
    private String nome;

    public Cliente(){

    }
    public Cliente(Long id, String nome){
        this.nome = nome;
        this.id = id;
    }

    /**
     * @return the id
     */
    public Long getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

}

dao

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Dao;

import Utils.HibernateUtil;
import java.util.List;
import modelo.Cliente;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author Fred
 */
public class ClienteDaoImpl implements ClienteDao {

    public void save(Cliente cliente) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.save(cliente);
        t.commit();
    }

    public Cliente getCliente(long id) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        return (Cliente) session.load(Cliente.class, id);
    }

    public List<Cliente> list() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from Cliente").list();
        t.commit();
        return lista;
    }

    public void remove(Cliente cliente) {
       Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.delete(cliente);
        t.commit();
    }

    public void update(Cliente cliente) {
         Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.update(cliente);
        t.commit();
    }

}

Controller

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controller;

import Dao.ClienteDao;
import Dao.ClienteDaoImpl;
import java.awt.event.ActionEvent;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import modelo.Cliente;

/**
 *
 * @author Fred
 */
@ManagedBean
@SessionScoped
public class ClienteController {
    private Cliente cliente;
    private DataModel listaClientes;

     public DataModel getListarClientes() {
        List<Cliente> lista = new ClienteDaoImpl().list();
        listaClientes = new ListDataModel(lista);
        return listaClientes;
    }

     public Cliente getCliente() {
        if(cliente == null){
            return new Cliente();
        } else {
             return cliente;
        }

    }

    public void setEditora(Cliente cliente) {
        this.cliente = cliente;
    }

 public void prepararAdicionarCliente(){
        cliente = new Cliente();
    }

    public void prepararAlterarCliente(ActionEvent actionEvent){
        cliente = (Cliente)(listaClientes.getRowData());
    }

    public String excluirCliente(){

        Cliente clienteTemp = (Cliente)(listaClientes.getRowData());
        ClienteDao dao = new ClienteDaoImpl();
        dao.remove(clienteTemp);
        return "index";

    }

    public void adicionarCliente(){

        ClienteDao dao = new ClienteDaoImpl();
        dao.save(cliente);

    }

    public void alterarCliente(ActionEvent actionEvent){

        ClienteDao dao = new ClienteDaoImpl();
        dao.update(cliente);

    }
}

o jsf

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
                <h:panelGrid id="cliente" columns="2" style="margin-bottom:10px">

                    <h:outputLabel for="nome" value="Nome:" />
                    <h:inputText id="titulo" value="#{clienteController.cliente.nome}"/>



                    <p:commandButton actionListener="#{clienteController.adicionarCliente}" value="Inserir Cliente"/>
                    <p:commandButton actionListener="#{clienteController.alterarCliente}" value="Alterar Cliente"/>

                </h:panelGrid>
            </h:form>
    </h:body>
</html>

Alguem pode me ajudar?

meu hibernateutil esta assim

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Utils;


import modelo.Cliente;
import modelo.Produto;
import modelo.Venda;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
 * Hibernate Utility class with a convenient method to get Session Factory object.
 *
 * @author Fred
 */
public class HibernateUtil {
    private static SessionFactory sessionFactory;

    private HibernateUtil() {

    }

    public static SessionFactory getSessionFactory() {

        if (sessionFactory == null) {
            try {
                // Create the SessionFactory from standard (hibernate.cfg.xml)
                // config file.
                AnnotationConfiguration ac = new AnnotationConfiguration();
                ac.addAnnotatedClass(Cliente.class);
                ac.addAnnotatedClass(Venda.class);
                ac.addAnnotatedClass(Produto.class);

                sessionFactory = ac.configure().buildSessionFactory();
                System.out.println("sucesso");
                SchemaExport se = new SchemaExport(ac);
              se.create(true, true);


            } catch (Throwable ex) {
                // Log the exception.
                System.err.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            }

            return sessionFactory;

        } else {
            return sessionFactory;
        }

    }

    public static void main(String[] args) {
        HibernateUtil.getSessionFactory();
    }

}

vc ta usando aquele metodo preparaAdicionaCliente() antes de exibir a pagina de cadastro ?
e esse id é auto incremento ?

nao estou!
abro direto o pagina de cadastro!

como esta seu hibernate.cfg?

antes de abrir a pagina de cadastro, tenta fazer o seguinte… dpois de cliente = new Cliente()
coloca um

return "cadastroCliente" //nome da sua pagina de cadastro, nao precisa da extensao nao

e alem de exibir a pagina direto, chama esse metodo de preparaCadastro. esse metodo vai te redirecionar pra sua pagina de cadastro automaticamente

experimente colocar

<?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/teste</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">vertrigo</property>

<!--<property name="hibernate.hbm2ddl.auto">create-drop</property>-->


  </session-factory>
<!--<mapping class="Model.Editora"></mapping>-->
</hibernate-configuration>

Obrigado

falta mapear sua classe cliente

experimente colocar

coloque assim e teste

[quote=michelorth_92]falta mapear sua classe cliente

experimente colocar

coloque assim e teste[/quote]
eu mapeio ela no hibernateUtil

tenta colocar dentro do cfg tmb

se coloco da um erro, e não vai!

verificou se o hibernate criou mesmo essa tabela no banco?

tentou modificar aquele metodo q nem flei ?

[quote=thales_biolck]antes de abrir a pagina de cadastro, tenta fazer o seguinte… dpois de cliente = new Cliente()
coloca um

return "cadastroCliente" //nome da sua pagina de cadastro, nao precisa da extensao nao

e alem de exibir a pagina direto, chama esse metodo de preparaCadastro. esse metodo vai te redirecionar pra sua pagina de cadastro automaticamente
[/quote]
eu nao to usando o metodo prepararAdicionar

alterei o AdicionarCliente
fiz assim:

public void adicionarCliente(){
        cliente = new Cliente();

        ClienteDao dao = new ClienteDaoImpl();
        dao.save(cliente);
        

    }

Agora ele grava no banco so que traz o nome como NULL
so grava o id

mas isso nao, vai dar nao… vc ta criando um objeto td "zerado"e adicionado ele no banco

carra axei o provavel q esta dando erro

voce náo criou getter e setter para a classe cliente no seu controller

chama aquele metodo ali, com um <h:commandLink> ou algo tipo. ele vai te redirecionar pra pagina de cadastro

ok vou fazer o teste

coloquei o metodo assim

 public String prepararAdicionarCliente(){
        cliente = new Cliente();
        return"cadCliente";
    }

no index coloquei assim pra teste

<h:form prependId="false">
            <p:commandLink value="Novo Cliente" actionListener="#{clienteController.prepararAdicionarCliente}"/>
                    
                </h:form>

ao clicar em novo cliente nada acontece