Galera já rodei hoje o dia todo no google pra tentar resolver esse problema e não consegui já achei alguns tópicos bem parecidos, entretanto nenhuma solução que encontrei
resolveu o problema. O erro ocorre quando tento atualizar um registro do banco de dados que possuí um relacionamento com diversas entidades. Acredito que o erro esteja no relacionamento mas, não consigo resolver. agradeço muito a ajuda.
a entidade que quero atualizar está da seguinte forma.
[code]
@Entity
@Table(name = “instituicao”)
public class Instituicao {
@Id
private String identificador;
@Column(name = "nome")
private String nome;
@OneToMany(mappedBy = "instituicao", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection<Turma> turmas;
@OneToOne
@JoinColumn(name = "idUsuario")
@Cascade(CascadeType.SAVE_UPDATE)
private Coordenador coordenador;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "Instituicao_professor", joinColumns = { @JoinColumn(name = "identificador") }, inverseJoinColumns = { @JoinColumn(name = "cpfMatricula") })
@Cascade(CascadeType.ALL)
private Collection<Professor> professores;
@OneToMany(mappedBy = "instituicao", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection<Aluno> alunos;
private String telefone;
private String email;
private String estado;
private String cidade;
private String bairro;
private String rua;
private String cep;
private String numero;
private String complemento;
private String dominio;[/code]
e as duas outras entidades que apresentam erro e elas se relacionam segue abaixo
public class Turma {
@Id
private String idTurma;
@Column(name = "nome")
private String nome;
@OneToMany(mappedBy = "turma", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection<Aluno> alunos;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "turma_professor", joinColumns = { @JoinColumn(name = "idTurma") },
inverseJoinColumns = { @JoinColumn(name = "cpfMatricula") })
private Collection<Professor> professores;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "identificador", insertable = true, updatable = true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private Instituicao instituicao;
@Entity
@Table(name = "Aluno")
public class Aluno extends Usuario {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "idTurma", insertable = true, updatable = true)
@Fetch(FetchMode.JOIN)
private Turma turma;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "identificador", insertable = true, updatable = true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private Instituicao instituicao;
@OneToMany(mappedBy = "aluno", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection<Resposta> respostas;[/code]
e o erro é esse aqui ..
[code]5515 [http-8080-2] ERROR org.hibernate.util.JDBCExceptionReporter - Entrada em lote 0 delete from instituicao where identificador='CMT' foi abortada. Chame getNextException para ver a causa.
5515 [http-8080-2] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 23503
5515 [http-8080-2] ERROR org.hibernate.util.JDBCExceptionReporter - ERRO: atualização ou exclusão em "instituicao" viola restrição de chave estrangeira "fk6998f65758dd1ac" em "turma"
Detalhe: Chave (identificador)=(CMT) ainda é referenciada pela tabela "turma".
5516 [http-8080-2] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:251)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:172)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1004)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:342)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:136)
at br.com.simuladoOnline.persistencia.RepositorioInstituicao.removerInstituicao(RepositorioInstituicao.java:41)
at br.com.simuladoOnline.negocio.controlador.ControladorInstituicao.removerInstituicao(ControladorInstituicao.java:24)
at br.com.simuladoOnline.servico.ServicoInstituicao.removerInstituicao(ServicoInstituicao.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:418)
at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)
at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1400)
at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:1005)
at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:103)
at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)
at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:44)
at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)
at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:166)
at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:291)
at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:353)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
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.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 delete from instituicao where identificador='CMT' foi abortada. Chame getNextException para ver a causa.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2598)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2737)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:244)
... 38 more
122986 [http-8080-2] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 23503
122986 [http-8080-2] ERROR org.hibernate.util.JDBCExceptionReporter - Entrada em lote 0 delete from instituicao where identificador='CEMA' foi abortada. Chame getNextException para ver a causa.
122986 [http-8080-2] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 23503
122986 [http-8080-2] ERROR org.hibernate.util.JDBCExceptionReporter - ERRO: atualização ou exclusão em "instituicao" viola restrição de chave estrangeira "fk3c6d4cb758dd1ac" em "aluno"
Detalhe: Chave (identificador)=(CEMA) ainda é referenciada pela tabela "aluno".
122986 [http-8080-2] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:251)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:172)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1004)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:342)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:136)
at br.com.simuladoOnline.persistencia.RepositorioInstituicao.removerInstituicao(RepositorioInstituicao.java:41)
at br.com.simuladoOnline.negocio.controlador.ControladorInstituicao.removerInstituicao(ControladorInstituicao.java:24)
at br.com.simuladoOnline.servico.ServicoInstituicao.removerInstituicao(ServicoInstituicao.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:418)
at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)
at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1400)
at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:1005)
at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:103)
at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)
at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:44)
at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)
at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:166)
at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:291)
at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:353)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
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.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 delete from instituicao where identificador='CEMA' foi abortada. Chame getNextException para ver a causa.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2598)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2737)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:244)
... 38 more