Pregunta

Lo siento si esto es una víctima, no podía encontrar, pero el realmente sabe qué buscar, de todos modos ...

Tengo tres clases, Parent, Child y Other

Parent tiene muchas Child donde el niño tiene una columna Parent_Id

Other contiene una referencia a un Child través de una columna Child_Id

Cuando elimino un Parent, también quiero eliminar todos los objetos Child asociados. Si estos objetos son referenciados por Child ninguna clase Other, quiero sus objetos (los) Other referencias Child_Id a ser anuladas.

¿Qué reglas en cascada necesito en las dos relaciones?

Además, se actualizará entidades de NHibernate en memoria, así como en la base de datos?

es decir. si tengo un montón de Parent, Child y Other en la memoria (es decir, cargado de db, no transitoria) y decirle NH eliminar un Parent, ¿qué pasará? Asumo los objetos Parent y Child llegarán a ser transitoria? ¿Qué pasará con la propiedad de cualquier objeto Child Other?

Editar: cuando se usa All-delete-orphan, lo que las clases un objeto como un huérfano? En el ejemplo anterior, es un Child un huérfano si se elimina su Parent padres? Hace la referencia de la materia Other cuando se considera una entidad como huérfanos?

Gracias

¿Fue útil?

Solución

NH no actualiza ninguna de sus entidades en la memoria (a excepción de las identificaciones y las versiones). NH no se hace responsable de gestionar las relaciones de ustedes entidades. Sólo persiste lo que hizo en la memoria de la base de datos.

Desde este punto de vista debería ser más fácil de entender.

cascade="delete" significa que cuando se elimina el padre, el niño se elimina también. cascade="delete-orphan" medios, que, además, el niño es incluso eliminar si no hay referencias de padres más. Esto, por supuesto, sólo funciona si el niño está en la sesión.

La instancia de borrado se transitoria en la memoria. Las referencias a la instancia transitoria (de Other) causarán una excepción. Que yo sepa, es necesario eliminar la referencia a los casos eliminados por sí mismo. Es probable que pueda hacerlo implícita por parte de algunos trucos, pero dudo que esto será limpio. Es la lógica de negocio.

Para las relaciones entre padres e hijos, cascade="all-delete-orphan" es apropiado.

Como referencia regulares prefiero cascade="none".

Hay una gran explicación por Ayende Rahien

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top