Problema exclusão hibernate

2 respostas
G

Tenho a seguinte situação:
Tenho um objeto PAI: CESTA.
dentro desse objeto CESTA eu tenho uma lista de objetos FILHOS: CESTAITEM.

eu quero gravar a cesta e que os fihlos sejam salvos também, ou seja, dou um session.saveOrUpdate(cesta);
O mapeamento está assim (abreviado):

public abstract class Cesta {
	
	@Id @GeneratedValue(strategy=GenerationType.AUTO, generator = "SE_CESTA")
	@Column (name = "ID_CESTA", nullable=false, length=5)
	private Long id;
	
	@SuppressWarnings("unchecked")
	@OneToMany(targetEntity = CestaItemEntity.class, fetch = javax.persistence.FetchType.LAZY, mappedBy= "cesta")
	@Cascade(value={CascadeType.ALL,CascadeType.DELETE_ORPHAN})
	@JoinColumn(name="ID_CESTA", referencedColumnName="ID_CESTA")
	private Set<CestaItem> cestaItem;
	
        ... gets e sets..
}

Ok.. o "gravar" funciona ok . Grava a cesta e os objetos filhos.
Mas se na minha sessão eu incluo um novo objeto e excluo outro dos objetos filhos e gravo denovo a cesta, ou seja, dou um session.saveOrUpdate(cesta) com a nova lista de objetos filhos, o hibernate não está excluindo o objeto que nao está mais na lista e está incluindo o novo.

Eu gostaria de saber se o mapeamento está certo e se alguem tem alguma dica...

Ficou "entendível" ou complicado ?

Obrigado !

2 Respostas

B

É gerado algum erro?
Se você manda salvar uma cesta com itens a menos que a que consta no banco, o CascadeType.DELETE_ORPHAN vai tratar de deletar este item do banco também. Não entendi muito bem o seu passo a passo, se pudesse explicar denovo.

EDIT: tente utilizar CascadeType.SAVE_UPDATE junto com o DELETE_ORPHAN ao invés de ALL.

G

bKn:
É gerado algum erro?
Se você manda salvar uma cesta com itens a menos que a que consta no banco, o CascadeType.DELETE_ORPHAN vai tratar de deletar este item do banco também. Não entendi muito bem o seu passo a passo, se pudesse explicar denovo.

EDIT: tente utilizar CascadeType.SAVE_UPDATE junto com o DELETE_ORPHAN ao invés de ALL.

Opa, obrigado pela resposta.
Não… não é gerado nenhum erro…

Vou tentar detalhar um pouco mais o passo a passo para ver se fica um pouco mais claro.

Ex:

Tenho uma cesta de compras e ponho 1 bala e 1 pirulito dentro. (, é meio estranho mas  valendo o exemplo)

Vou gravar essa cesta de compras e grava a cesta (id = 1) com os itens bala e pirulito. (session.saveOrUpdate(cesta));

Após isso, na minha tela eu decido tirar o pirulito da cesta e adicionar um chocolate.
Portanto, agora tenho uma cesta (já gravada com id = 1) com uma lista de itens que contém agora uma bala e um chocolate (no lugar do pirulito).
e ponho para gravar denovo essa cesta. (session.saveOrUpdate(cesta));

O “main problem” que acontece é que , na hora que gravo denovo a cesta (com o chocolate) ele não tá excluindo o pirulito da tabela, mas tá incluindo o chocolate entende ? ou seja, a cesta está ficando com 3 produtos (bala, pirulito e chocolate) quando na verdade só são 2 (bala e chocolate).

Compliquei demais denovo ?
hehehehe…

Aguardo, obrigado ! Obs. vou tentar fazer o que você me disse agora.

Edit: Não funcionou, continua ocorrendo o mesmo erro.

Criado 4 de agosto de 2009
Ultima resposta 4 de ago. de 2009
Respostas 2
Participantes 2