Problemas com o Hibernate

Bom Dia pessoal, estou com problema para incluir e alterar informações no banco de dados Oracle 9i com hibernate, ele apresenta o erro abaixo porem quando eu dou um f5 na pagina ele vai normal, coloquei uma impressao do valor que recebe, segue:

Erro:

recebido -> null
java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
	at org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:63)
	at org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:46)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
	at br.com.compras.generics.GenericDao.save(GenericDao.java:35)
	at br.com.compras.util.bean.BancoBean.save(BancoBean.java:56)
	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: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:88)
	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:787)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
	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:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	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$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

Xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns="http://www.w3.org/1999/xhtml"
                template="./../../template/temp.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">

    <ui:define name="modal">
        <script type="text/javascript">
            function closeAll(a){a==1?(up_conf.hide(),update.close()):(novo_conf.hide(),novo.close())}function initNovo(){update.close();novo.show()}function initUpd(){novo.close();update.show()};
        </script>
        <h:form>
            <p:confirmDialog modal="true" message="Deseja efetuar a alteração no cadastro do banco ?" showEffect="fade"
                             hideEffect="fade" widgetVar="up_conf">
                <p:commandButton value="Sim" image="ui-icon ui-icon-check" action="#{bancoBean.update}" update="tb_dados pn2"
                                 oncomplete="closeAll(1)" async="true" />
                <p:commandButton value="Não" image="ui-icon ui-icon-close" type="button" onclick="up_conf.hide()"/>
            </p:confirmDialog>
        </h:form>
        <h:form>
            <p:confirmDialog modal="true" message="Deseja gravar novo Banco ?" showEffect="fade"
                             hideEffect="fade" widgetVar="novo_conf">
                <p:commandButton value="Sim" image="ui-icon ui-icon-check" action="#{bancoBean.save}" update="tb_dados pn1"
                                 oncomplete="closeAll(2)" async="true" />
                <p:commandButton value="Não" image="ui-icon ui-icon-close" type="button" onclick="novo_conf.hide()"/>
            </p:confirmDialog>
        </h:form>
    </ui:define>

    <ui:define name="top">
        <b>&lt;h:outputText value="Manutenção de Dados / Banco" style="font-family: Tahoma; font-size: 15px; font: bold;" /&gt;</b>
    &lt;/ui:define&gt;

    &lt;ui:define name="center"&gt;
        &lt;div align="center"&gt;

            &lt;h:form prependId="false" id="form_central"&gt;
                &lt;p:spacer height="20"/&gt;
                &lt;p:panel header="Manutenção cadastro de bancos" style="width: 400px; text-align: center" &gt;
                    &lt;div align="center"&gt;
                        &lt;p:commandButton value="Carregar" image="ui-icon ui-icon-play" async="true" action="#{bancoBean.lista}" update="tb_dados"/&gt;
                        &lt;p:spacer width="20"/&gt;
                        &lt;p:commandButton value="Novo" image="ui-icon ui-icon-plus" onclick="initNovo()" type="button"/&gt;
                        <br/>
                        &lt;p:spacer height="40"/&gt;

                        &lt;p:dataTable var="b" value="#{bancoBean.list}" emptyMessage="Nenhum Banco Listado !" rows="10"
                                     style="width: 350px; text-align: center" selectionMode="single"
                                     selection="#{bancoBean.b}" rowSelectListener="#{bancoBean.onRowSelected}"
                                     onRowSelectComplete="initUpd()" id="tb_dados" onRowSelectUpdate="pn2"
                                     paginator="true" paginatorPosition="top" rowUnselectListener="#{bancoBean.init}"&gt;
                            &lt;p:column sortBy="#{b.idBanco}" filterBy="#{b.razao}"&gt;
                                &lt;f:facet name="header"&gt;
                                    Código do Banco
                                &lt;/f:facet&gt;
                                #{b.idBanco}
                            &lt;/p:column&gt;
                            &lt;p:column sortBy="#{b.razao}" filterBy="#{b.razao}"&gt;
                                &lt;f:facet name="header"&gt;
                                    Razão Social
                                &lt;/f:facet&gt;
                                #{b.razao}
                            &lt;/p:column&gt;
                        &lt;/p:dataTable&gt;
                    &lt;/div&gt;
                &lt;/p:panel&gt;
                &lt;p:spacer height="20"/&gt;
            &lt;/h:form&gt;

            &lt;h:form prependId="false"&gt;
                &lt;p:panel header="Novo" id="pn1" widgetVar="novo" style="width: 280px" closable="true"  visible="false" &gt;
                    &lt;div align="center"&gt;
                        &lt;h:panelGrid columns="2" style="width: 100%; text-align: center"&gt;
                            &lt;h:outputLabel value="Código do Banco: "/&gt;
                            &lt;p:inputText value="#{bancoBean.b.idBanco}" required="true" requiredMessage="Preencher Campo [Código do Banco] !"/&gt;
                            &lt;h:outputLabel value="Razão Social: "/&gt;
                            &lt;p:inputText value="#{bancoBean.b.razao}" required="true" requiredMessage="Preencher Campo [Razão Social] !"/&gt;
                        &lt;/h:panelGrid&gt;
                        <br/>
                        &lt;p:commandButton value="Gravar" image="ui-icon ui-icon-wrench" process="@form" onclick="novo_conf.show()"/&gt;
                    &lt;/div&gt;
                &lt;/p:panel&gt;
            &lt;/h:form&gt;

            &lt;h:form prependId="true" id="pn2"&gt;
                &lt;p:panel header="Alterar"  widgetVar="update" style="width: 280px" closable="true"  visible="false"&gt;
                    &lt;div align="center"&gt;
                        &lt;h:panelGrid columns="2" id="update_content" style="width: 100%; text-align: center"&gt;
                            &lt;h:outputLabel value="Código: "/&gt;
                            &lt;p:inputText value="#{bancoBean.b.idBanco}" disabled="true"/&gt;
                            &lt;h:outputLabel value="Razão Social: "/&gt;
                            &lt;p:inputText value="#{bancoBean.b.razao}" required="true" requiredMessage="Preencher Campo [Razão Social] !"/&gt;
                        &lt;/h:panelGrid&gt;
                        <br/>
                        &lt;p:commandButton value="Atualizar" image="ui-icon ui-icon-wrench" process="@form" onclick="up_conf.show()"/&gt;
                    &lt;/div&gt;
                &lt;/p:panel&gt;
            &lt;/h:form&gt;
        &lt;/div&gt;
    &lt;/ui:define&gt;
&lt;/ui:composition&gt;

Bean:

package br.com.compras.util.bean;

import br.com.compras.generics.GenericDao;
import br.com.compras.generics.SendGrowl;
import br.com.compras.modelo.Banco;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author mpolverini
 */
@ManagedBean
@ViewScoped
public class BancoBean implements Serializable {

    private Banco b = new Banco();
    private GenericDao&lt;Banco&gt; dao = new GenericDao&lt;Banco&gt;(Banco.class);
    private List&lt;Banco&gt; list;

    public BancoBean() {
    }

    public Banco getB() {
        return b;
    }

    public void setB(Banco b) {
        this.b = b;
    }

    public List&lt;Banco&gt; getList() {
        return list;
    }

    public void setList(List&lt;Banco&gt; list) {
        this.list = list;
    }

    public void init() {
        b = new Banco();
    }

    public void lista() {
        list = dao.findAll();
        if (list.size() &lt;= 0) {
            SendGrowl.sendAlert(&quot;Nenhum item a listar&quot;);
        }
    }

    public void save() {
        try {
            dao.save(b);
            init();
            lista();
        } catch (Exception ex) {
            ex.printStackTrace();
            SendGrowl.sendFatalError(&quot;Banco não foi salvo !&quot;);
        }
    }

    public void update() {
        try {
            dao.update(b);
            init();
            lista();
        } catch (Exception ex) {
            ex.printStackTrace();
            SendGrowl.sendFatalError(&quot;Banco não foi salvo !&quot;);
        }
    }

    public void onRowSelected(SelectEvent e) {
        b = (Banco) e.getObject();
    }
}

GenericDao

package br.com.compras.generics;

import br.com.compras.util.hibernate.HibernateUtil;
import java.io.Serializable;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author mpolverini
 */
public class GenericDao&lt;T&gt; implements GenericRepository&lt;T&gt;, Serializable {

    private final Class typeClass;
    private Session session;
    private Transaction transaction;

    public GenericDao(Class argClass) {
        typeClass = argClass;
    }

    /**
     * 
     * @param instance 
     * @see Save T
     */
    @Override
    public void save(T instance) {
        System.err.println(&quot;recebido -&gt; &quot; + instance);
        try {
            session = new HibernateUtil().getSessionFactory().openSession();
            transaction = session.beginTransaction();
            session.save(instance);
            if (!transaction.wasCommitted()) {
                transaction.commit();
            }
            SendGrowl.sendInfo(&quot;Salvo com sucesso !&quot;);
        } catch (HibernateException ex) {
            transaction.rollback();
            System.err.println(&quot;Erro ao efetuar .save() para o objeto da classe &quot; + instance.getClass().getSimpleName());
            ex.printStackTrace();
            SendGrowl.sendError(&quot;Erro ao salvar, verifique se os dados estão corretos !&quot;);
        } finally {
            try {
                session.clear();
                session.close();
            } catch (Exception ex) {
                System.err.println(instance.getClass().getSimpleName());
                System.err.println(instance);
                ex.printStackTrace();
            }
        }
    }

    /**
     * 
     * @param instance 
     * @see Update T
     */
    @Override
    public void update(T instance) {
        try {
            session = new HibernateUtil().getSessionFactory().openSession();
            transaction = session.beginTransaction();
            session.update(instance);
            if (!transaction.wasCommitted()) {
                transaction.commit();
            }
            SendGrowl.sendInfo(&quot;Atualizado com sucesso !&quot;);
        } catch (Exception ex) {
            transaction.rollback();
            System.err.println(&quot;Erro ao efetuar .update() para o objeto da classe &quot; + instance.getClass().getName());
            ex.printStackTrace();
            SendGrowl.sendError(&quot;Erro ao efetuar atualização !&quot;);
        } finally {
            session.clear();
            session.close();
        }
    }

    /**
     * 
     * @param id
     * @return  T
     */
    @Override
    @SuppressWarnings(value = &quot;unchecked&quot;)
    public T findById(long id) {
        try {
            session = new HibernateUtil().getSessionFactory().openSession();
            return (T) session.load(typeClass, id);
        } catch (Exception ex) {
            System.err.println(&quot;Erro ao efetuar busca por id para o objeto da classe &quot; + typeClass.getName());
            ex.printStackTrace();
            return null;
        } finally {
            session.clear();
            session.close();
        }
    }

    /**
     * 
     * @return List&lt;T&gt;
     */
    @Override
    @SuppressWarnings(value = "unchecked")
    public List&lt;T&gt; findAll() {
        session = new HibernateUtil().getSessionFactory().openSession();
        return session.createCriteria(typeClass).list();
    }

    /**
     * 
     * @param conditions use t reference class
     * @return  List&lt;T&gt;
     */
    @Override
    @SuppressWarnings(value = "unchecked")
    public List&lt;T&gt; findByConditions(String conditions) {
        session = new HibernateUtil().getSessionFactory().openSession();
        try {
            String sql = "From " + typeClass.getName() + " as t where " + conditions;
            return session.createQuery(sql).list();
        } catch (Exception ex) {
            System.err.println("Erro ao efetuar buscas com condições " + typeClass.getName());
            ex.printStackTrace();
            return null;
        } finally {
            session.clear();
            session.close();
        }
    }

    /**
     * 
     * @param field
     * @return MAX (ID)
     */
    @Override
    public long getMaxId(String field) {
        session = new HibernateUtil().getSessionFactory().openSession();
        try {
            String sql = "Select MAX(" + field + ") from " + this.typeClass.getSimpleName();
            Object result = this.session.createQuery(sql).uniqueResult();
            long ret;
            if (result == null) {
                return 1;
            } else {
                ret = Long.parseLong(result.toString()) + 1;
                return ret;
            }
        } catch (Exception ex) {
            System.err.println("select max(" + field + ") from " + this.typeClass.getSimpleName());
            System.err.println("Erro ao efetuar getMAX(ID) na classe " + typeClass.getSimpleName());
            ex.printStackTrace();
            return 0;
        } finally {
            session.clear();
            session.close();
        }
    }

    /**
     * 
     * @param field
     * @param conditions
     * @return MAX ID
     */
    @Override
    public long getMaxIdConditions(String field, String conditions) {
        session = new HibernateUtil().getSessionFactory().openSession();
        try {

            long result = (Long) this.session.createQuery(" select max(:field)+1 from "
                    + this.typeClass.getName() + " as t where :conditions").setParameter(":field", field).setParameter(":conditions", conditions).uniqueResult();

            if (result == 0) {
                result = 1;
            }

            return result;

        } catch (Exception ex) {

            System.err.println("Erro ao efetuar getMAX(ID) + condições na classe " + typeClass.getName());
            ex.printStackTrace();
            return 0;
        } finally {
            session.clear();
            session.close();
        }
    }
}

fico no aguardo