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:
<?xml version="1.0" encoding="UTF-8"?>
<!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…
<?xml version="1.0" encoding="UTF-8"?>
<!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);