CascadeType.ALL não deleta List

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

cara,

tenta colocar org.hibernate.annotations.CascadeType.DELETE_ORPHAN no seu cascade e ve se funciona.

t+

tente utilizar:

    @Cascade({ CascadeType.ALL, CascadeType.DELETE_ORPHAN })
    @OneToMany(fetch=FetchType.LAZY)  
    @JoinColumn(name="COD_ITEM")  
    private List<ItensAtributos> atributos = new ArrayList<ItensAtributos>();  

[quote=laurocaetano1]tente utilizar:

@Cascade({ CascadeType.ALL, CascadeType.DELETE_ORPHAN }) @OneToMany(fetch=FetchType.LAZY) @JoinColumn(name="COD_ITEM") private List<ItensAtributos> atributos = new ArrayList<ItensAtributos>(); [/quote]

Este tipo esta depreciado… “CascadeType.DELETE_ORPHAN”…

tem algum outro?

utilize então:

@OneToMany(orphanRemoval=true)