Lo siguiente está adaptado de la referencia de Java Hibernate http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/objectstate.html#objectstate-transitive para NHiberate 3.0 (es decir, el tronco svn actual).
Para cada operación básica de la sesión de NHibernate - incluyendo Persist(), Merge(), SaveOrUpdate(), Delete(), Lock(), Refresh(), Evict(), Replicate() - hay un correspondiente estilo de cascada. Respectivamente, los estilos de cascada se denominan persistir, fusionar, guardar-actualizar, eliminar, bloquear, actualizar, desalojar, replicar. El estilo de cascada para Save() y Update() es save-update; para SaveAndUpdateCopy() es fusión; y para PersistOnFlush() persiste. Y eliminar es un alias para eliminar.
Si desea que una operación se realice en cascada a lo largo de una asociación, debe indicarlo en el documento de asignación. Por ejemplo:
<one-to-one name="person" cascade="persist"/>
estilos en cascada Mi combinar:
<one-to-one name="person" cascade="persist,delete,lock"/>
Se puede utilizar en cascada = "all" para especificar que todas las operaciones deben ser conectados en cascada a lo largo de la asociación. La cascada predeterminada = "ninguno" especifica que ninguna operación se va a conectar en cascada.
Un estilo de cascada especial, eliminar huérfano, se aplica solo a asociaciones de uno a muchos, e indica que la operación Eliminar() se debe aplicar a cualquier objeto secundario que se elimine de la asociación. Y all-delete-huérfano es lo mismo que all, delete-huérfano.
recomendaciones:
- Por lo general no tiene sentido para permitir la cascada en una < muchos-a-uno o > < muchos-a-muchos > asociación. Cascade suele ser útil para < one-to-one > y < one-to-many > asociaciones.
- Si la vida útil del objeto secundario está limitada por la duración del objeto principal, conviértalo en un objeto de ciclo de vida especificando cascade = "all-delete-huérfano".
- De lo contrario, es posible que no necesite cascada en absoluto. Pero si crees que a menudo trabajarás con tus padres e hijos juntos en la misma transacción, y quieres ahorrarte algo de tipeo, considera usar cascade = "persist, merge, save-update".
La asignación de una asociación (una asociación de un solo valor o una colección) con cascade = "all" marca la asociación como una relación de estilo primario/secundario donde guardar/actualizar/eliminar el elemento primario guarda/actualiza/eliminar del niño o los niños. Un hijo que se vuelve sin referencia por su padre no se elimina automáticamente, excepto en el caso de una < asociación uno a muchos > mapeada con cascada = "eliminar-huérfano". La semántica precisa de las operaciones en cascada para una relación padre/hijo son los siguientes:
- Si un padre se pasa a persistir(), se pasan todos los niños para que persistan()
- Si un padre se pasa a Merge(), se pasan todos los niños a Merge()
- Si un padre se pasa a Save(), Update() o saveOrUpdate(), todos los niños se pasan a saveOrUpdate()
- Si un niño transitoria o separada se convierte referenciado por un padre persistente, se pasa a SaveOrUpdate()
- Si se elimina un padre, todos los chi ldren se pasa a Delete()
- Si un padre persistente desreferencia a un hijo, no ocurre nada especial; la aplicación debe eliminar explícitamente el elemento secundario si es necesario, a menos que cascade = "delete-huérfano", en cuyo caso el "huérfano" niño es eliminado
+1 y generosidad, una respuesta muy útil. –
¡Hola! ¡Tu enlace está roto! –