Srs:
Tenho uma aplicacao que usa struts e hibernate, ela esta funcional e configurada perfeitamente.
No entando estou com o problema para tratamento dos erros lancados pelo hibernate, como no caso de uma chave duplicada.
Para evitar ter que fazer um select antes de cada insert para linhas iguais, eu criei uma chave primaria que deveria me permitir que eu inserisse varias linhas sem problemas.
O que acontece eh que a cada exceccao do hibernate a aplicacao para com erro e eu queria que continuasse traalhando. O que nao consigo eh capturar o erro por bloco try catch, que mesmo capturada para a aplicacao.
Segue algumas configs…
package br.webpanel.util;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
/**
*
* @author Bruno
* Factory para manejar o Hibernate
*/
public class HibernateSessionFactory {
/**
* Armazena o SessionFactory do hibernate
*/
private static SessionFactory factory;
/**
* Inicia o SessionFactory
*/
static{
buildFactory();
}
/**
* Abri a sess�o com o hibernate
* @return Session aberta
*/
public static Session abrirSessao()
{
Session s =factory.openSession();
try {
SQLQuery sq= s.createSQLQuery("select now()");
sq.list();
} catch (Exception ex){
buildFactory();
s = factory.openSession();
}
return s;
}
/**
* Retorna o Sessionfactory
* @return SessionFactory
*/
public static SessionFactory getFactory() {
return factory;
}
/**
* M�todo que � chamado no objeto ServletInit para iniciar o hibernate
*/
public static void init(){}
private static void buildFactory(){
Configuration cfg = new AnnotationConfiguration();
cfg.configure();
factory = cfg.buildSessionFactory();
}
}
...
try{
Operadora operadora = operadoraDAO.get(split[0]);
if(operadora!=null)
{
Contato c = new Contato(operadora,
split[1],grupoContato);
contatoDAO.salvar(c);
session.beginTransaction().commit();
conta++;
}
}
}
}
catch(Exception e){
}
Exceccao lancada
15/09/2008 16:14:05 org.hibernate.util.JDBCExceptionReporter logExceptions
WARNING: SQL Error: 0, SQLState: 23505
15/09/2008 16:14:05 org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: ERROR: duplicate key violates unique constraint "contato_telefone_key"
15/09/2008 16:14:05 org.hibernate.AssertionFailure <init>
SEVERE: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: null id in br.webpanel.objeto.Contato entry (don't flush the Session after an exception occurs)
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:55)
at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:157)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:113)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at br.webpanel.action.adm.VoipContatosAction.insereAllContatos(VoipContatosAction.java:160)
at br.webpanel.action.adm.VoipContatosAction.execute(VoipContatosAction.java:67)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at br.webpanel.servlet.AccessFilter.doFilter(AccessFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:619)