Fala, pessoal, beleza?
Estou com um problema aqui (que até acredito saber onde é) e não sei nem como procurar a solução.
O cenário é mais ou menos o seguinte:
Peguei um sistema legado para “traduzir” para Java e não querem alterar a modelagem de dados devido a alguns outros sistemas que utilizam o mesmo banco. E nessa modelagem me deparei com o seguinte:
EntidadeA:
- idEntA
- campo1a
- campo2a
EntidadeB:
- idEntA
- codEntB
- campo1b
- campo2b
EntidadeC:
- idEntA
- codEntC
- campo1c
- campo2c
EntBxEntC:
- idEntA
- codEntB
- codEntC
- dataCadastro
É algo mais ou menos assim. Consegui mapear no Hibernate (utilizando Annotations) para consultas, porém quando preciso apagar um registro ele retorna um erro de java.sql.SQLException: Índice de coluna inválido.
O mapeamento da classe de ligação (EntBxEntC) ficou assim:
@Id
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "idEntA", referencedColumnName = "idEntA", insertable = false, updatable = false),
@JoinColumn(name = "codEntB", referencedColumnName = "codEntB", insertable = false, updatable = false) })
private EntidadeB entidade;
@Id
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumns(value = {
@JoinColumn(name = "idEntA", referencedColumnName = "idEntA", insertable = false, updatable = false),
@JoinColumn(name = "codEntC", referencedColumnName = "codEntC", insertable = false, updatable = false) })
private EntidadeC particularidade;
@Column(name = "dataCadastro")
private Date dataCadastro;
Os atributos insertable e updatable como false eu tive que incluir porque senão eu não conseguiria consultar a base.
Ainda não testei inclusão, mas estou tendo problemas para apagar.
Segue o Stack Trace do erro:
16:54:27,592 DEBUG [AbstractBatcher ] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
16:54:27,592 DEBUG [SQL ]
delete
from
EntBxEntC
where
idEntA=?
and codEntB=?
and codEntC=?
16:54:27,593 TRACE [BasicBinder ] binding parameter [1] as [BIGINT] - 58391
16:54:27,593 TRACE [BasicBinder ] binding parameter [2] as [BIGINT] - 4
16:54:27,593 TRACE [BasicBinder ] binding parameter [3] as [BIGINT] - 1
16:54:27,594 DEBUG [DefaultListableBeanFactory] Creating instance of bean 'jstlLocalization'
16:54:27,594 TRACE [BasicBinder ] binding parameter [4] as [BIGINT] - 58391
16:54:27,595 DEBUG [AbstractBatcher ] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
16:54:27,597 DEBUG [DefaultListableBeanFactory] Returning cached instance of singleton bean 'VRaptorRequestProvider'
16:54:27,597 DEBUG [DefaultListableBeanFactory] Finished creating instance of bean 'jstlLocalization'
16:54:27,598 DEBUG [DefaultListableBeanFactory] Finished creating instance of bean 'defaultValidator'
16:54:27,598 DEBUG [DefaultListableBeanFactory] Finished creating instance of bean 'servlet3MultipartInterceptor'
16:54:27,599 DEBUG [DefaultListableBeanFactory] Creating instance of bean 'exceptionHandlerInterceptor'
16:54:27,602 DEBUG [JDBCExceptionReporter] could not delete: [br.com.operativa.sisma.model.monitor.EntidadeParticularidade#component[particularidade,entidade]{entidade=br.com.operativa.sisma.model.monitor.Entidade#component[codEntidade,convenio]{convenio=br.com.operativa.sisma.model.monitor.Convenio#58391, codEntidade=1}, particularidade=null}] [delete from EntBxEntC where idEntA=? and codEntB=? and codEntC=?]
java.sql.SQLException: Índice de coluna inválido
at oracle.jdbc.driver.OraclePreparedStatement.setLongInternal(OraclePreparedStatement.java:4901)
at oracle.jdbc.driver.OraclePreparedStatement.setLong(OraclePreparedStatement.java:4888)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setLong(OraclePreparedStatementWrapper.java:206)
at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$1.doBind(BigIntTypeDescriptor.java:52)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:91)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:283)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:278)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:130)
at org.hibernate.type.ComponentType.nullSafeSet(ComponentType.java:317)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:130)
at org.hibernate.type.ComponentType.nullSafeSet(ComponentType.java:317)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2684)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2911)
at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:97)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:189)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
at br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:23)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
