Silenziosamente ignorato remove ()

Esiste un’entity framework A di riferimento A (molti a uno) quadro B, con riferimento inverso (mappato) da B a A. Esiste anche un riferimento da A a C e riferimento inverso da C a A. Quando emetto entityManager.remove (A ) quindi flush (), “delete” non è gerarchizzato! Ma non ci sono eccezioni. È come se non fosse stato chiamato remove (). Perché dovrebbe succedere? Se before remove () estraiamo A dai riferimenti inversi B.listOfA e C.listOfA, “delete” viene generato come previsto.

Nota anche la mia altra domanda in cui sono arrivato alla conclusione che orphanRemoval non funziona sempre come previsto. Ora sto iniziando a sospettare che forse la cascata abbia funzionato bene, ma dopo quella rimozione a cascata è stato “ingoiato” come ho descritto qui.

Dai un’occhiata a questa risposta . Fondamentalmente, le specifiche JPA impongono che un’ quadro rimossa venga nuovamente gestita se viene applicata l’operazione persist.

Per verificare che ciò avvenga realmente, abilitare il livello di log di traccia per il pacchetto org.hibernate e cercare voci di registro come:

 un-scheduling entity deletion ... 

Per evitare comportamenti imprevedibili, è consigliabile rimuovere i riferimenti alle quadro rimosse da tutte le altre istanze di quadro caricate nella stessa sessione / transazione.