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><h:outputText value="Manutenção de Dados / Banco" style="font-family: Tahoma; font-size: 15px; font: bold;" /></b>
</ui:define>
<ui:define name="center">
<div align="center">
<h:form prependId="false" id="form_central">
<p:spacer height="20"/>
<p:panel header="Manutenção cadastro de bancos" style="width: 400px; text-align: center" >
<div align="center">
<p:commandButton value="Carregar" image="ui-icon ui-icon-play" async="true" action="#{bancoBean.lista}" update="tb_dados"/>
<p:spacer width="20"/>
<p:commandButton value="Novo" image="ui-icon ui-icon-plus" onclick="initNovo()" type="button"/>
<br/>
<p:spacer height="40"/>
<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}">
<p:column sortBy="#{b.idBanco}" filterBy="#{b.razao}">
<f:facet name="header">
Código do Banco
</f:facet>
#{b.idBanco}
</p:column>
<p:column sortBy="#{b.razao}" filterBy="#{b.razao}">
<f:facet name="header">
Razão Social
</f:facet>
#{b.razao}
</p:column>
</p:dataTable>
</div>
</p:panel>
<p:spacer height="20"/>
</h:form>
<h:form prependId="false">
<p:panel header="Novo" id="pn1" widgetVar="novo" style="width: 280px" closable="true" visible="false" >
<div align="center">
<h:panelGrid columns="2" style="width: 100%; text-align: center">
<h:outputLabel value="Código do Banco: "/>
<p:inputText value="#{bancoBean.b.idBanco}" required="true" requiredMessage="Preencher Campo [Código do Banco] !"/>
<h:outputLabel value="Razão Social: "/>
<p:inputText value="#{bancoBean.b.razao}" required="true" requiredMessage="Preencher Campo [Razão Social] !"/>
</h:panelGrid>
<br/>
<p:commandButton value="Gravar" image="ui-icon ui-icon-wrench" process="@form" onclick="novo_conf.show()"/>
</div>
</p:panel>
</h:form>
<h:form prependId="true" id="pn2">
<p:panel header="Alterar" widgetVar="update" style="width: 280px" closable="true" visible="false">
<div align="center">
<h:panelGrid columns="2" id="update_content" style="width: 100%; text-align: center">
<h:outputLabel value="Código: "/>
<p:inputText value="#{bancoBean.b.idBanco}" disabled="true"/>
<h:outputLabel value="Razão Social: "/>
<p:inputText value="#{bancoBean.b.razao}" required="true" requiredMessage="Preencher Campo [Razão Social] !"/>
</h:panelGrid>
<br/>
<p:commandButton value="Atualizar" image="ui-icon ui-icon-wrench" process="@form" onclick="up_conf.show()"/>
</div>
</p:panel>
</h:form>
</div>
</ui:define>
</ui:composition>
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<Banco> dao = new GenericDao<Banco>(Banco.class);
private List<Banco> list;
public BancoBean() {
}
public Banco getB() {
return b;
}
public void setB(Banco b) {
this.b = b;
}
public List<Banco> getList() {
return list;
}
public void setList(List<Banco> list) {
this.list = list;
}
public void init() {
b = new Banco();
}
public void lista() {
list = dao.findAll();
if (list.size() <= 0) {
SendGrowl.sendAlert("Nenhum item a listar");
}
}
public void save() {
try {
dao.save(b);
init();
lista();
} catch (Exception ex) {
ex.printStackTrace();
SendGrowl.sendFatalError("Banco não foi salvo !");
}
}
public void update() {
try {
dao.update(b);
init();
lista();
} catch (Exception ex) {
ex.printStackTrace();
SendGrowl.sendFatalError("Banco não foi salvo !");
}
}
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<T> implements GenericRepository<T>, 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("recebido -> " + instance);
try {
session = new HibernateUtil().getSessionFactory().openSession();
transaction = session.beginTransaction();
session.save(instance);
if (!transaction.wasCommitted()) {
transaction.commit();
}
SendGrowl.sendInfo("Salvo com sucesso !");
} catch (HibernateException ex) {
transaction.rollback();
System.err.println("Erro ao efetuar .save() para o objeto da classe " + instance.getClass().getSimpleName());
ex.printStackTrace();
SendGrowl.sendError("Erro ao salvar, verifique se os dados estão corretos !");
} 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("Atualizado com sucesso !");
} catch (Exception ex) {
transaction.rollback();
System.err.println("Erro ao efetuar .update() para o objeto da classe " + instance.getClass().getName());
ex.printStackTrace();
SendGrowl.sendError("Erro ao efetuar atualização !");
} finally {
session.clear();
session.close();
}
}
/**
*
* @param id
* @return T
*/
@Override
@SuppressWarnings(value = "unchecked")
public T findById(long id) {
try {
session = new HibernateUtil().getSessionFactory().openSession();
return (T) session.load(typeClass, id);
} catch (Exception ex) {
System.err.println("Erro ao efetuar busca por id para o objeto da classe " + typeClass.getName());
ex.printStackTrace();
return null;
} finally {
session.clear();
session.close();
}
}
/**
*
* @return List<T>
*/
@Override
@SuppressWarnings(value = "unchecked")
public List<T> findAll() {
session = new HibernateUtil().getSessionFactory().openSession();
return session.createCriteria(typeClass).list();
}
/**
*
* @param conditions use t reference class
* @return List<T>
*/
@Override
@SuppressWarnings(value = "unchecked")
public List<T> 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