¿Cómo utilizo el atributo inverso? Si no me equivoco, para una a muchas relaciones, el atributo inverso debe establecerse en verdadero. Para las relaciones de varios a varios, uno de los atributos inversos de la clase de entidad debe establecerse en verdadero y otro en falso.
¿Alguien puede arrojar algo de luz sobre esto?
nhibernate
nhibernate-mapping
Graviton
fuente
fuente
Respuestas:
El atributo inverso no debe establecerse en verdadero ...
Utiliza el atributo inverso para especificar el 'propietario' de la asociación. (Una asociación puede tener un solo propietario, por lo que un extremo debe establecerse en inverso, el otro debe establecerse en 'no inverso'). (Propietario:
inverse=false
; No propietario:inverse=true
)En una asociación de uno a muchos, si no marca la colección como el final inverso, NHibernate realizará una ACTUALIZACIÓN adicional. De hecho, en este caso, NHibernate primero insertará la entidad que está contenida en la colección, si es necesario inserta la entidad propietaria de la colección, y luego actualiza la 'entidad de la colección', para que se establezca la clave foránea y la asociación está hecho. (Tenga en cuenta que esto también significa que la clave externa en su base de datos debe ser anulable).
Cuando marca el final de la colección como 'inverso', NHibernate primero persistirá la entidad que 'posee' la colección, y luego persistirá las entidades que están en la colección, evitando una instrucción UPDATE adicional.
Entonces, en una asociación bidireccional, siempre tiene un extremo inverso.
fuente
Además de la respuesta anterior , y según tengo entendido, debe conservar el valor de la clave externa en la colección manualmente, es decir, si no desea la declaración de actualización adicional:
Para obtener una explicación más detallada del atributo inverso, consulte la siguiente publicación:
http://www.emadashi.com/index.php/2008/08/nhibernate-inverse-attribute/
fuente
Puedo ver dónde entra el "propietario", pero una asociación es una tubería, y puedes mirar hacia abajo en cualquier extremo, así que qué decir de qué entidad "posee" la tubería.
Una forma diferente de ver esto es que en una relación de Uno a Muchos, en realidad hay 2 relaciones en curso.
Relación 1: Padre de muchos hijos.
Relación 2: Cada hijo con un padre
Entonces NH intentará ejecutar sql para almacenar cada uno de estos en la base de datos. Pero no es necesario porque cuando configura la clave externa, por ejemplo, en la relación 2 cuando se almacena un hijo, automáticamente también se ha fijado la relación de un padre con el hijo porque la relación 1 es la "inversa" de la relación 2 .
Entonces, los medios inversos, es algo que obtenemos por defecto una vez que hemos establecido la relación principal. es decir, no hay necesidad de que NH ejecute sql para arreglar la Relación 1 y al marcar la colección secundaria como inversa, NH omitirá la ejecución de sql cuando se agregue la colección secundaria.
Asumiría que si no le dijera a NH que era una inversa, entonces sería un desperdicio de esfuerzo en hacer sql para intentar establecer la relación inversa también, aunque no fuera necesario.
fuente