Hibernate - cascade só funciona para adicionar, e não para remover pq?

seguinte possuo um metodo que faz o seguinte:

//logica
usuario.setEmpresas(empresas); //passo a lista de empresas e ele adiciona corretamente
DAOUsuario.update(usuario);
//logica

até ae tudo bem, quando é pra adicionar ele faz isso corretamente, mais suponha que eu tenho agora 8 empresas para esse usuario e agora removi 3 empresas dessa LISTA, e faço novamente

//logica
usuario.setEmpresas(empresas);
DAOUsuario.update(usuario);
//logica

ele não remove as 3 que removi da lista, é como se ele somente adicionasse e não pode remover.

e coloquei para que o cascade seja “all”

segue meu mapeamento:

[code]<?xml version="1.0" encoding="UTF-8"?>

usuario_sequence START WITH 2
	<property name="nome" column="nome" type="string"/>
	<property name="login" column="login" type="string"/>
	<property name="senha" column="senha" type="string"/>
	<property name="ativo" column="ativo" type="boolean"/>
	
	<set name="permissao" table="usuario_permissao" cascade="all">
	    <key column="usuario"/>
	    <element column="permissao" type="string"/>
	</set>
    
    <list name="empresas" cascade="all">
      	<key column="codigoDoUsuario" not-null="true"/>
      	<list-index column="companyIdx"/>
      	<one-to-many class="br.com.rhunificado.model.UsuarioCompany"/>
	</list>
</class>

[/code]

[code]<?xml version="1.0" encoding="UTF-8"?>

    <many-to-one name="codigoDoUsuario" column="codigoDoUsuario" not-null="true" insert="false" update="false" class="br.com.rhunificado.model.Usuario"/>
	
	<property name="codigoExterno" column="codigoExterno" type="int"/>
	
		
</class>

[/code]

O que você espera que o hibernate faça? Apague do banco os itens removidos?

correto, basicamente seria o seguinte, se eu adicionar na lista, 8 empresas, ele adicione as 8 empresas, se eu fui na lista e removi 3 empresas e atualizei a tabela, quero que ele remova essas 3 empresas que removi da lista.

ja fui na api do hibernate e não encontro alguma propriedade que me de esse tipo de ação.

[quote=maaarkin]correto, basicamente seria o seguinte, se eu adicionar na lista, 8 empresas, ele adicione as 8 empresas, se eu fui na lista e removi 3 empresas e atualizei a tabela, quero que ele remova essas 3 empresas que removi da lista.

ja fui na api do hibernate e não encontro alguma propriedade que me de esse tipo de ação.[/quote]Não é assim que o cascade funciona.

Esse post explica para que serve o cascade: http://uaihebert.com/?p=1622

O que você quer é o orphanRemoval que também é explicado no post, mas não sei se sua versão do hibernate dá suporte.

Ok, vou procurar sobre, já é um caminho a seguir, obrigado Hebert

Hebert, tem como por exemplo, eu sobrepor a lista que já existe? por exemplo limpar as empresas desse usuario em específico e setar as novas? pq esse orphan removal nao está funcionando na minha aplicação.

[quote=maaarkin]Hebert, tem como por exemplo, eu sobrepor a lista que já existe? por exemplo limpar as empresas desse usuario em específico e setar as novas? pq esse orphan removal nao está funcionando na minha aplicação.[/quote]Mesmo que você sobreponha os valores antigos vão continuar lá.