NHibernate Atributo Cascada (cascade):
Las Entidades poseen asociaciones con otros objetos, esto puede ser una asociación a un solo elemento (many-to-one) o una asociación a una colección (one-to-many, many-to-any).
Sin embargo cualquiera que sea el caso nosotros somos capaces de indicarle a NHibernate como debe recorrer automáticamente las asociaciones de la entidad y actuar de acuerdo a como se le ha indicado a través del atributo cascada. Por ejemplo si tenemos un objeto padre y este objeto a su vez contiene una colección de objetos hijos asociados a él, cada vez que creamos cada objeto hijo con el atributo de "cascade = save/update" le estamos dando instrucciones a NHibernate de añadir el objeto hijo a dicha colección asociándolo con el padre a través de la llave foránea sin necesidad de instrucciones explicitas de nuestra parte.
A continuación se explican los valores que puede tomar este atributo y su funcionalidad.
- none = no realizar ninguna acción en cascada, dejar que el usuario lo maneje por si solo.
- save-update = cuando un objeto se guarda/actualiza, revisa las asociaciones de ese objeto con otros y guarda/actualiza cualquier objeto que lo requiera.
- delete = cuando el objeto es eliminado se eliminan todos los objetos que están asociados a el.
- all = aplica para todos es decir save-update-delete (revisa las asociaciones que posee el objeto y guarda-actualiza-elimina todos los objetos que encuentre).
Para completar un poco. En el caso en donde lo aplicacos una tabla Maestro y una Detalle:
ResponderEliminarMaestro(ID_MAESTRO, .... )
Detalle(ID_DETALLE, ID_MAESTRO_FK)
Los archivos de mapeo deberían contener:
Maestro.hbm.xml
<set
name="NombrePropiedad"
cascade="ALL"
inverse="True"
lazy = "false"
fetch = "select">
<key>
<column name="ID_MAESTRO_FK" />
</key>
</set>
Detalle.hbm.xml
<many-to-one>
name = ""
class = "full.name.class"
column= "ID_MAESTRO_FK"
/>