¿Cómo usar cascada e inversa en hibernación? ¿Cuál es el procedimiento/etiqueta para definirlos? ¿Están relacionados entre sí y cómo son útiles?¿Cuál es la diferencia entre cascade & inverse en hibernate, para qué se utilizan?
Respuesta
En el caso de muchos-a-muchos relación a la Tabla intermediario; "Cascade" indica si se creará/actualizará un registro en la tabla secundaria. Mientras que "Inverso" indica si se creará/actualizará un registro en la tabla intermedia
p. Supongamos a continuación el escenario 1 estudiante puede tener varios teléfonos. Entonces la clase de Estudiante tiene propiedad para el Conjunto de teléfonos. También 1 teléfono puede ser propiedad de varios estudiantes. Entonces, la clase de teléfono tiene propiedad para el conjunto de estudiantes. Este mapeo se menciona en la tabla stud_phone.
Así que hay tres tablas a saber. Tabla de estudiante, teléfono y stud_phone (intermediario). Mapeo podría ser:
<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>
Se crea un nuevo objeto de estudiantes y 2 objetos nuevos teléfonos se añaden a su conjunto. Y se llama session.save(student_obj)
. Dependiendo de las configuraciones "en cascada" e "inversa", se dispararán diferentes consultas.
A continuación se muestran diferentes combinaciones de cascada e inversa y su impacto.
1) CASCADE ES NINGUNO y inversa es falsa
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 es Ninguno y inverso es cierto
Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
3) CASCADE es SAVE-actualización y inversa es falsa
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 es una actualización de guardado e INVERSO 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 (?, ?)
Como se puede ver, solo cuando se guardó CASCADE, los registros se crearon también en la tabla TELEFONO. De otra forma no.
Cuando INVERSE era falso (es decir, el alumno era el propietario de la relación) se actualizó la tabla intermedia STUD_PHONE. Cuando el valor inverso es verdadero, el teléfono es el propietario de la relación, por lo tanto, aunque se haya creado un nuevo alumno, la tabla intermedia no se actualizó.
Entonces en el caso de la relación de dos entidades, "cascada" afecta a la tabla de otra entidad y "inversa" afecta a la tabla intermedia. Entonces su efecto es independiente.
Esta respuesta debe marcarse como la mejor respuesta. +1 para una explicación detallada –
De acuerdo con @ArunKumar – TechSpellBound
La mejor respuesta de la historia. –
Información de referencia desde Different between cascade and inverse enlace:
1. inversa: Esto se utiliza para decidir qué lado es el dueño relación para gestionar la relación (inserción o actualización de la columna de clave externa).
2. cascada: en cascada, después de una operación (guardar, actualizar y eliminar) se hace , que decidirá si se necesita llamadas otras operaciones (guardar, actualizar y borrar ) en la que otras entidades tiene relación entre sí.
Conclusión: En resumen, la “inversa” decide qué lado va a actualizar la clave externa , mientras que “en cascada” decide ¿cuál es el seguimiento de la operación debe ejecutar. Ambos parecen bastante similares en relación, pero es totalmente diferente cosas diferentes. Los desarrolladores de Hibernate valen la pena dedicar tiempo a investigar en , porque malinterpretar el concepto o usarlo incorrectamente traerá un serio problema de integridad de datos en su aplicación.
También puedes ver este tema del foro: https://forum.hibernate.org/viewtopic.php?f=1&t=949041
- 1. Diferencia entre las anotaciones de JPA Cascade y la anotación de Hibernate Cascade
- 2. ¿Cuál es la diferencia entre flush y commit en Hibernate?
- 3. ¿Cuál es la diferencia entre persist() y merge() en Hibernate?
- 4. Hibernate: ¿cuál es la diferencia entre MySQLDialect y MySQLInnoDBDialect?
- 5. Hibernate Delete Cascade
- 6. ¿Cuál es la diferencia entre a.getClass() y A.class en Java?
- 7. ¿Cuál es la diferencia entre estas consultas T-SQL que utilizan OR?
- 8. ¿Cuál es la diferencia entre ".equals" y "=="?
- 9. ¿Cuál es la diferencia entre DELETE_ORPHAN y DELETE?
- 10. ¿Cuál es la diferencia entre codificar/decodificar?
- 11. ¿Cuál es la diferencia entre el
- 12. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 13. ¿Cuál es la diferencia entre @NotAudited y RelationTargetAuditMode.NOT_AUDITED en Hibernate EnVers?
- 14. Cuál es la diferencia entre $ y jQuery
- 15. ¿Cuál es la diferencia entre dict() y {}?
- 16. ¿Cuál es la diferencia entre System.Linq.Enumerable.WhereListIterator & System.Linq.Enumerable.WhereSelectListIterator?
- 17. ¿Cuál es la diferencia entre un JavaBean y un POJO?
- 18. Cuál es la diferencia entre $ (...) y `...`
- 19. ¿Cuál es la diferencia entre estas funciones?
- 20. Hibernate - Una relación entre muchas y orphanRemoval cascade
- 21. Cuál es la diferencia entre = y: =
- 22. Cuándo usar inverse = false en NHibernate/Hibernate OneToMany relationships?
- 23. ¿Cuál es la diferencia entre existe y se define?
- 24. ¿Cuál es la diferencia entre + = y = +?
- 25. ¿cuál es la diferencia entre:.! y: r !?
- 26. ¿Cuál es la diferencia entre() vs [] vs {}?
- 27. ¿Cuál es la diferencia entre window.innerWidth window.outerWidth?
- 28. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 29. ¿Cuál es la diferencia entre {0} y ""?
- 30. ¿Cuál es la diferencia entre .ToString (+) y ""
Google "hibernate cascada inversa" trajo [this] (http://www.mkyong.com/hibernate/different-between-cascade-and-inverse/) como el 3er resultado. –
hmmm No me di cuenta de que ya se refería al mismo enlace. – YoK
Yo y @ArunKumar creo que la respuesta de Kaushik Lele debe marcarse como la aceptada. – TechSpellBound