2015-01-09 13 views
6

Ho cercato la risposta ma non ho potuto ottenerla correttamente. Qual è la differenza tra CascadeType.ALL, cascade = CascadeType.REMOVE, orphanRemoval quando si imposta FetchType.EAGER nella relazione @OneToMany? Una volta ho avuto un problema durante l'eliminazione dei record. Ho usato a seguitoQual è la differenza tra CascadeType.ALL, cascade = CascadeType.REMOVE e orphanRemoval

@OneToMany(cascade = CascadeType.ALL, mappedBy = "companyEntity", fetch = FetchType.EAGER) 
Set<EmployeeEntity> employeeEntities; 

Quando ho cercato di eliminare il record dei dipendenti, non mi stava mostrando alcuna eccezione e non è stato deleteing record. Ma quando ho cambiato CascadeType.ALL a CascadeType.REMOVE allora funzionava. Perché non funzionava con CascadeType.ALL piuttosto con CascadeType.REMOVE?

Grazie per semplice spiegazione in anticipo;)

risposta

2

This spiega parte della tua domanda.

'OrphanRemoval = true' Vs 'CascadeType.REMOVE'

La differenza tra le due impostazioni è in risposta alla rimozione bambino oggetti della collezione puntato da controllante.

Se viene specificato orphanRemoval = true, l'istanza dell'indirizzo rimosso è rimossa automaticamente. Se viene specificato solo Cascade = CascadeType.REMOVE , non viene eseguita alcuna azione automatica poiché la rimozione di una relazione non è un'operazione di rimozione .