Problema CHATO com o Hibernate

2 respostas
H

Olá Pessoal…

Estou desenvolvendo um aplicação web com hibernate + pgsql e a seguinte excessão está sendo lançada:

org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:65)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:202)
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:91)
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:86)
	at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:171)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2048)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2427)
	at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:51)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:980)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:353)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
	at br.com.pack.smc.utils.HibernateUtility.commitTransaction(HibernateUtility.java:47)
	at br.com.pack.smc.actions.CadastroCentrosDeSaudeAction.execute(CadastroCentrosDeSaudeAction.java:228)
	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:194)
	at org.mentawai.filter.ValidationFilter.filter(ValidationFilter.java:146)
	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:169)
	at org.mentawai.filter.AuthenticationFilter.filter(AuthenticationFilter.java:63)
	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:169)
	at org.mentawai.core.Controller.invokeAction(Controller.java:341)
	at org.mentawai.core.Controller.service(Controller.java:289)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into CONTA_CORRENTE_FCES (AGENCIA, COD_AGENCIA, NUMERO, VINCULO_COD, BANCO_TIPOS_COD, COD) values (45654, 654645, 6456546, 6, 28, 6) foi abortada. Chame getNextException para ver a causa.
	at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2478)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1298)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:347)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2540)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
	... 48 more

Eu não entendo como essa excessão pode ser lançada jah que fiz tudo direitinho, os mapeamentos do rel. entre as duas tabelas são:

&lt?xml version="1.0" encoding="UTF-8"?&gt
<!DOCTYPE hibernate-mapping 
	PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="br.com.pack.smc.beans.ContaCorrenteFCES" table="CONTA_CORRENTE_FCES">
        <id name="codigo" column="COD">
             <generator class="foreign">
				<param name="property">vinculoSus</param>	
			</generator>
        </id>
       <property name="agencia" column="AGENCIA" type="java.lang.String"/>
       <property name="codigoAgencia" column="COD_AGENCIA" type="java.lang.String"/>
       <property name="numero" column="NUMERO" type="java.lang.String"/> 
       
       <many-to-one name="vinculoSus"
				  column="VINCULO_COD"
                  unique="true"
                  cascade="save-update"/> 
          
         <many-to-one name="banco" 
                   class="br.com.pack.smc.beans.BancoTipos"
                   column="BANCO_TIPOS_COD"
                   unique="true"/>        
       
    </class>    
</hibernate-mapping>

E…

&lt?xml version="1.0" encoding="UTF-8"?&gt
<!DOCTYPE hibernate-mapping 
	PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="br.com.pack.smc.beans.VinculoSus" table="VINCULO_SUS">
        <id name="cod" column="COD">
            <generator class="increment"/>
        </id>
        
       <property name="num_contrato_municipal" column="NUM_CONTRATO_MUNICIPAL" type="java.lang.String"/>
       <property name="num_contrato_estadual" column="NUM_CONTRATO_ESTADUAL" type="java.lang.String"/>
       <property name="data_contrato_municipal" column="DATA_CONTRATO_MUNICIPAL" type="java.util.Calendar"/>
       <property name="data_contrato_estadual" column="DATA_CONTRATO_ESTADUAL" type="java.util.Calendar"/>
 		              
       <many-to-one name="fces" 
                    class="br.com.pack.smc.beans.FCES"
                    column="FCES_COD"
                    unique="true"
                    cascade="save-update"/>
                    
        <one-to-one name="contaCorrenteFCES" property-ref="vinculoSus" cascade="all"/>
               
    </class>    
</hibernate-mapping>

E aparentemente está tudo ok… O banco está tudo em ordem, vejam as tabelas:

conta_corrente_fces
(
  cod int8 NOT NULL,
  agencia varchar(20),
  cod_agencia int4,
  numero varchar(10),
  vinculo_cod int8,
  banco_tipos_cod int4,
  CONSTRAINT conta_corrente_fces_pk PRIMARY KEY (cod),
  CONSTRAINT conta_corrente_fces_banco_tipos_cod_fkey FOREIGN KEY (banco_tipos_cod)
      REFERENCES banco_tipos (cod) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT conta_corrente_fces_vinculo_cod_fkey FOREIGN KEY (vinculo_cod)
      REFERENCES vinculo_sus (cod) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
vinculo_sus
(
  cod int8 NOT NULL,
  num_contrato_municipal varchar(20),
  num_contrato_estadual varchar(20),
  data_contrato_municipal date,
  data_contrato_estadual date,
  fces_cod int8 NOT NULL,
  CONSTRAINT vinculo_sus_pkey PRIMARY KEY (cod),
  CONSTRAINT vinculo_sus_fces_cod_fkey FOREIGN KEY (fces_cod)
      REFERENCES fces (cod) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

Eu sinceramente não sei oq está acontecendo pois fiz td certinho e jah fiz relacionamentos parecidos em outras ocasiões e funcionou beleza…:((

Desculpem a quantidade de codigo colocada e o tamanho da mensagem… Eh que eu realmente nao sei mais oq fazer…

Se alguem tiver tempo de ler toda essa msg e puder ajudar e ficaria extremamente grato!

Desde ja, agradeço a atenção!!

Abraços!!!

ah, aqui o codigo onde inserio(ou tento inserir na base de dados):

cc = new ContaCorrenteFCES();
			cc.setAgencia(input.getStringValue("agencia"));
			cc.setCodigoAgencia(input.getStringValue("codigo_agencia"));
			cc.setNumero(input.getStringValue("conta"));		
			HibernateUtility.beginTransaction();
            Query q = HibernateUtility.getSession().createQuery("from BancoTipos b where b.codigo = :valor")
                                                   .setString("valor",input.getStringValue("cod_banco"));
            BancoTipos banco = (BancoTipos) q.uniqueResult();;
            HibernateUtility.closeSession();            
			cc.setBanco(banco);		
			
			vinculo.setContaCorrenteFCES(cc);	
			cc.setVinculoSus(vinculo);

2 Respostas

A

Rapaz, eu acho que o driver do postgresql nao aceita ataulizacao em batch. Me lembro que quando utilizei ele, fazendo o sql na mao e chamando o metodo executeBatch ele retornava esta exception.

Alberto

H

Olá…

Acho que o problema não é esse já que nesse mesmo sistema eu faço INSERTS com relacionamentos/mapeamentos feitos dessa mesma forma…

O problema, creio que seja algo no mapeamento… tendo em vista que já consegui fazer esses INSERTS…

Sendo que já rodei de cima pra baixo, vendo tudo, e não consegui identificar tal problema… Talvez uma pessoa de fora possa enxergar tal problema!

Alguem consegui ver?? hehehe

Abraços!!

Criado 3 de novembro de 2006
Ultima resposta 3 de nov. de 2006
Respostas 2
Participantes 2