Sto tentando con molta fatica di eliminare un'entità coinvolta in varie relazioni (solo @ManyToOne
). Tuttavia, Hibernate non elimina nulla, dopo aver chiamato em.remove
, tutto rimane invariato.Hibernate EntityManager: rimozione entità di riferimento non funzionante
Ho 5 entità (E1 - E5
), fa riferimento l'entità (E6
) in questione in questo modo:
@Entity
public class EX {
@OneToMany(mappedBy = "eX", fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REMOVE })
private Set<E6> e6s;
}
E6
sé ha il rovescio @ManyToOne
Relazioni:
public class E6{
@ManyToOne(optional = false)
private E1 e1;
@ManyToOne(optional = false)
private E2 e2;
@ManyToOne(optional = false)
private E3 e3;
@ManyToOne(optional = false)
private E4 e4;
@ManyToOne(optional = false)
private E5 e5;
}
(a sinistra out id, colonne aggiuntive ecc ...)
Ogni volta che chiamo em.remove(instanceOfE6)
, semplicemente non succede nulla. Ho aggiunto Hibernate SQL-Output e non riesco a vedere un singolo tentativo di eseguire una query DELETE
.
Dal momento che la cancellazione può avvenire da una richiesta AJAX e un fresco EntityManager, ho aggiunto una chiamata di fondere prima della cancellazione, causo otherwhise ottengo un Entity eccezione non gestita:
em.remove(em.merge(instanceOfE6));
Ma niente . Lo stato rimane invariato.
Così ho provato ad aggiungere un metodo @PreRemove
per cancellare tutte le relazioni prima di rimuovere l'entità ... Il metodo non viene mai chiamato.
Ho provato varie operazioni in cascata (compreso Cascade.ALL
), ma poiché tutto ciò di cui ho bisogno è rimuovere e persistere, anche questo dovrebbe funzionare.
ho pensato di usare un'istruzione DELETE nativo (ogni entità ha un id surrogata, in modo che molto probabilmente di lavoro) - ma dal momento che tutto avviene all'interno di un AJAX-chiamata, non voglio usare quel , perché voglio aggiornare Persistence-Cache senza ritirare tutte le entità coinvolte ...
Qualche idea?
Se hai bisogno di più fonti, lasciami un commento.
Ho anche provato a rimuovere l'ente in questione da tutti i rapporti (oggetto saggio), e chiamare em.merge()
su una delle entità rimanenti, sperando che Hibernate whipe l'entità non collegato - senza fortuna.
Hai commesso la transazione? –
Hai chiamato 'em.flush()'? – jmvivo
@DavidLevesque Esecuzione di Hibernate in modalità autocommit ... – dognose