Boa Tarde…
Tenho o seguinte problema: tenho um item que por sua vez tem uma lista de atributos. Quando insiro o item no BD, esta inserindo normalmente os atributos… mais quando tiro algum atributo da lista. e dou um saveorupdate no item. ele não esta excluindo o item.
A Classe item esta assim, mapeada:
@Entity
@Table(schema = "EST", name = "ITENS")
public class Itens {
@Id
@Column(name = "COD_ITEM")
private int codigo;
@Column(name = "DSC_ITEM")
private String nome;
@Cascade(CascadeType.ALL)
@OneToMany(fetch=FetchType.LAZY)
@JoinColumn(name="COD_ITEM")
private List<ItensAtributos> atributos = new ArrayList<ItensAtributos>();
...
}
Classe ItensAtributos
@Entity
@Table(name="ITENS_ATRIBUTOS",schema="EST")
public class ItensAtributos implements Serializable {
@Id
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="COD_ITEM")
private Itens item;
@Id
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumns({@JoinColumn(name="ID_ATRIBUTO"),@JoinColumn(name="ID_ESTADO")})
private AtributoEstado atributo;
...
}
Meu codigo para delete a lista é assim:
Itens item = this.itensDAO.pegaporId(data.getCodigo());
item.getAtributos().clear();//Pega a lista e zera seu conteudo..
this.itensDAO.salvar(item);//session.saveOrUpdate(item);
Ele dá o seguinte erro: (Parece que esta dando update na minha lista de atributos. e não excluindo ele)
Hibernate:
update
EST.ITENS_ATRIBUTOS
set
COD_ITEM=null
where
COD_ITEM=?
26/10/2011 13:53:15 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [default] in context with path [/dipweb] threw exception
org.hibernate.exception.ConstraintViolationException: could not delete collection: [br.com.diplomata.dominio.estoque.Itens.atributos#700119]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.persister.collection.AbstractCollectionPersister.remove(AbstractCollectionPersister.java:1131)
at org.hibernate.action.CollectionUpdateAction.execute(CollectionUpdateAction.java:71)
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:187)
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.diplomata.utils.interceptors.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:50)
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.diplomata.utils.interceptors.VerificaLoginInterceptor.intercept(VerificaLoginInterceptor.java:39)
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.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.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
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.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.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -407, SQLSTATE: 23502, SQLERRMC: TBSPACEID=3, TABLEID=17941, COLNO=0
at com.ibm.db2.jcc.b.rh.b(rh.java:1397)
at com.ibm.db2.jcc.b.rh.c(rh.java:1384)
at com.ibm.db2.jcc.a.db.k(db.java:352)
at com.ibm.db2.jcc.a.db.a(db.java:60)
at com.ibm.db2.jcc.a.t.a(t.java:52)
at com.ibm.db2.jcc.a.tb.b(tb.java:202)
at com.ibm.db2.jcc.b.sh.Z(sh.java:1849)
at com.ibm.db2.jcc.b.sh.d(sh.java:2416)
at com.ibm.db2.jcc.b.sh.U(sh.java:459)
at com.ibm.db2.jcc.b.sh.executeUpdate(sh.java:442)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:46)
at org.hibernate.persister.collection.AbstractCollectionPersister.remove(AbstractCollectionPersister.java:1108)
... 49 more
Obrigado pela ajuda