Erro Hibernate exclusão com relacionamento

2 respostas
Daniel_Reis

Pessoal,

estou com um problema com o hibernate ao tentar deletar um registro com associação. Não quero excluir as associações, pelo contrário, quero avisar ao usuário que existem dependências…

na minha servlet chamo o delete do daoGenerico:

try {
                hDAO.deleta(p);
                logger.info(Constantes.NOMELOG + "Usuario: " + request.getSession().getAttribute("nomeUsuario") + " excluiu a pessoa:" + p.getNome());
                response.getWriter().write("{success:true}");
            } catch (ConstraintViolationException ex) {
                logger.info(Constantes.NOMELOG + "********** AQUI EX 1 ***********");
                ex.printStackTrace();
            } catch (java.sql.BatchUpdateException ex) {
                logger.info(Constantes.NOMELOG + "********** AQUI EX 2 ***********");
                ex.printStackTrace();
            } catch (Throwable t) {
                logger.info(Constantes.NOMELOG + "********** AQUI EX 3 ***********");
                t.printStackTrace();
            }

o metódo delete:

public void deleta(T t) throws ConstraintViolationException, BatchUpdateException, Throwable { logger.info("deletando " + t); getSession().delete(t); }

estou repassando as exceções para a servlet para fazer um teste, mas n está entrando em nenhum catch… e retorna para o meu jsp:

<html><head><title>Apache Tomcat/6.0.18 - Error report</title><style><!–H1 {font-family:Tahoma,Arial
,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif
;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color
:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black
;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76
;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black
;}A.name {color : black;}HR {color : #525D76;}–></style> </head><body><h1>HTTP Status 500 - </h1><HR
size=“1” noshade=“noshade”>

type Exception report

message

<b>description

</b> The server encountered an internal error () that prevented it from fulfilling this request.<

/u>
<b>exception</b> <pre>javax.servlet.ServletException: org.hibernate.exception.ConstraintViolationException

: Could not execute JDBC batch update

br.com.filter.FilterHibernateSession.doFilter(FilterHibernateSession.java:29)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

</pre>
<b>root cause</b> <pre>org.hibernate.exception.ConstraintViolationException: Could not execute

JDBC batch update

org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)

org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)

org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)

org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)

org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:146)

org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener

.java:298)

org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)

org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)

org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)

org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)

br.com.filter.FilterHibernateSession.doFilter(FilterHibernateSession.java:23)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

</pre>

root cause <pre>java.sql.BatchUpdateException: Cannot delete or update a parent row
: a foreign key constraint fails (singular/glb_orgao, CONSTRAINT FK3FCB5F307A648194 FOREIGN KEY
(ID_ORDENADOR_DESPESA) REFERENCES glb_pessoa (PES_ID))
com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1666)
com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1082)
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723
)
org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:146)
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener
.java:298)
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
br.com.filter.FilterHibernateSession.doFilter(FilterHibernateSession.java:23)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
</pre>

note The full stack trace of the root cause is available in the Apache Tomcat
/6.0.18 logs.

<HR size=“1” noshade=“noshade”><h3>Apache Tomcat/6.0.18</h3></body></html>

Alguma sugestão?

Obrigado a todos…

2 Respostas

Daniel_Reis

Pessoal,

desculpa está upando o tópico, mas alguém já passou por esse problema?

[],s

Daniel

D

Cara… seu código tá meio confuso, mas pelo que eu entendi não há nenhum “commit” ou “flush” no código.

O Hibernate, GERALMENTE, NÃO executa SQLs de alteração no banco (INSERT, UPDATE e DELETE) imediatamente. Ele só os executa quando é dado “flush” na sessão. Como dentro do seu “try/catch” não há nenhum “commit” nem “flush”, acredito que este erro está acontecendo em outro lugar que não foi postado.

Verifique atentamente o Stacktrace do erro para você identificar corretamente onde ocorre o erro.

Espero ter ajudado. Até.

Criado 19 de janeiro de 2009
Ultima resposta 23 de jan. de 2009
Respostas 2
Participantes 2