Come utilizzare la cascata e l'inversa in sospensione? Qual è la procedura/tag per definirli? Sono collegati tra loro e come sono utili?Qual è la differenza tra cascata e inversa in ibernazione, a cosa servono?
risposta
In caso di molti-a-molti relazione attraverso tabella intermedia; "Cascade" dice se un record verrà creato/aggiornato nella tabella figlia. Mentre "Inverse" indica se un record verrà creato/aggiornato nella tabella intermedia
ad es. Supponiamo di seguito lo scenario 1 studente può avere più telefoni. Quindi la classe Studente ha una proprietà per Set di telefoni. Anche 1 telefono può essere di proprietà di più studenti. Quindi la classe Phone ha una proprietà per Set of Students. Questa mappatura è menzionata nella tabella stud_phone.
Quindi ci sono tre tavoli vale a dire. Tavolo Studente, Telefono e Stud_phone (intermedio). mappatura potrebbe essere simile:
<set name="phoneset" table="stud_phone" cascade="save-update" inverse="true">
<key column="mapping_stud_id">< /key>
<many-to-many class="com.domain.Phone" column="mapping_phon_id"/>
</set>
Viene creato un nuovo oggetto di studenti e 2 nuovi oggetti di telefonia vengono aggiunti al suo set. E viene chiamato session.save(student_obj)
. In base alle impostazioni "a cascata" e "inversa" verranno emesse diverse query.
Di seguito sono riportate diverse combinazioni di cascata e inversa e il loro impatto.
1) cascata è nessuno e inverso è falso
Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
2) CASCADE è nessuno e inverso è vero
Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
3) CASCADE è save-update e inverso è falso
Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
4) CASCADE è save-update e INVERSE true
Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
Come si può vedere, solo quando CASCADE è stato salvato-aggiornamento i record sono stati creati anche nella tabella PHONE. Altrimenti no.
Quando INVERSE era falso (cioè lo studente era il proprietario della relazione) veniva aggiornata la tabella intermedia STUD_PHONE. Quando l'inverso è vero, il telefono è proprietario della relazione, quindi, anche se è stato creato un nuovo studente, la tabella intermedia non è stata aggiornata.
Pertanto, in caso di relazione tra due entità, la "cascata" influisce sulla tabella delle altre entità e "inversa" influisce sulla tabella intermedia. Quindi il loro effetto è indipendente.
Questa risposta dovrebbe essere contrassegnata come migliore risposta. +1 per spiegazione dettagliata –
Accetto con @ArunKumar – TechSpellBound
La migliore risposta di sempre. –
informazioni di riferimento da Different between cascade and inverse link:
1. inversa: Questo è usato per decidere da che parte è il proprietario rapporto di gestire il rapporto (inserimento o aggiornamento della colonna chiave esterna).
2. cascata: in cascata, dopo una sola operazione (salvo, aggiornamento e cancellazione) è fatto, si deciderà se si ha bisogno di chiamata altre operazioni (salvare, aggiornare ed eliminare ) su un altro soggetti che ha una relazione l'una con l'altra.
Conclusione: In breve, il “inversa” decide da che parte aggiornerà la chiave esterna , mentre “a cascata” decide qual è il seguito da operazione dovrebbe eseguire. Entrambi sembrano molto simili a in relazione, ma sono totalmente due cose diverse. Gli sviluppatori di Hibernate valgono la pena di dedicare tempo alla ricerca su , perché l'incomprensione del concetto o l'uso improprio porteranno gravi problemi di prestazioni o di integrità dei dati a nella loro applicazione.
controllare anche questo argomento del forum: https://forum.hibernate.org/viewtopic.php?f=1&t=949041
- 1. Qual è la differenza tra "$ a" e $ a in unix
- 2. Qual è la differenza tra $ a e $$ a in php?
- 3. Qual è la differenza tra dict() e {}?
- 4. Qual è la differenza tra Verilog! e ~?
- 5. Qual è la differenza tra = e: =
- 6. Qual è la differenza tra `##` e `hashCode`?
- 7. qual è la differenza tra:.! e: r !?
- 8. Qual è la differenza tra ("") e (null)
- 9. Qual è la differenza tra? : e ||
- 10. qual è la differenza tra [[], []] e [[]] * 2
- 11. Qual è la differenza tra $ e $$?
- 12. Qual è la differenza tra " " e ""?
- 13. Qual è la differenza tra {0} e ""?
- 14. Qual è la differenza tra {0} e +?
- 15. Qual è la differenza tra .ToString() e + ""
- 16. Qual è la differenza tra un'App API e un'app Web?
- 17. Qual è la differenza tra i file .lib e .a?
- 18. Qual è la differenza tra 'a e' _l?
- 19. Qual è la differenza tra: messa a fuoco e: attivo?
- 20. Qual è la differenza tra "new A()" e "A.newInstance()"?
- 21. Nelle statistiche di ibernazione qual è la differenza tra caricamento e recupero
- 22. Qual è la differenza tra invarianti e regole di convalida?
- 23. Qual è la differenza tra .replace e -replace in powershell?
- 24. Qual è la differenza tra: Args e: CaptureArgs in Catalyst?
- 25. Qual è la differenza tra dim e set in vba
- 26. Qual è la differenza tra $ get e $ find in JavaScript?
- 27. Qual è la differenza tra ConditionPathExists = e ConditionPathExists = | in systemd?
- 28. Qual è la differenza tra popen() e system() in C
- 29. Qual è la differenza tra .// e // * in XPath?
- 30. Qual è la differenza tra parentesi e parentesi in "richiedere"?
Googling "hibernate cascade inverse" ha portato [questo] (http://www.mkyong.com/hibernate/different-between-cascade-and-inverse/) come terzo risultato. –
hmmm Non ho notato che ti stavi già riferendo allo stesso link. – YoK
Io e @ArunKumar pensiamo che la risposta di Kaushik Lele debba essere contrassegnata come accettata. – TechSpellBound