miércoles, 24 de julio de 2013

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).
 

1 comentario:

  1. Para completar un poco. En el caso en donde lo aplicacos una tabla Maestro y una Detalle:

    Maestro(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"
    />

    ResponderEliminar