Hola Carlos, gracias por la respuesta. El mapping que sugeris me parece que no es lo que necesito porque requiere una tabla para Party que no es lo que cuiero.
Pude hacerlo de esta manera: <class name="Party"> <id name="Id"> <generator class="guid.comb"/> </id> <union-subclass name="Person" table="People"> <property name="FirstName"/> <property name="LastName"/> </union-subclass> <union-subclass name="Company" table="Companies"> <property name="CompanyName"/> </union-subclass> </class> Pero el query me da este error: Invalid join: c.Party [from Order o join fetch o.Customer c join fetch c.Party p] Insisto, lo que yo quiero es cargar Order, su Customer y su Party eager. Se puede? ---------------------------------- Carlos Peix 2011/6/2 Carlos Cocom <[email protected]> > Es necesario mapear la clase base y después los mapping para las sub clases > o extensiones esto también se pueden usando <union-subclass> pero esta > te crearía una tabla por clase excepto la común > > <?xml version="1.0" encoding="utf-8" ?> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > assembly="pruebas.nh.modelo" > namespace="pruebas.nh.modelo"> > <class name="Party"> > <id name="Id"> > <generator class="guid.comb" /> > </id> > <discriminator column="PartyType" /> > <property name="Location" /> > <property name="Hour" not-null="true" /> > </class> > </hibernate-mapping> > > > <?xml version="1.0" encoding="utf-8" ?> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > assembly="pruebas.nh.modelo" > namespace="pruebas.nh.modelo"> > <subclass name="Company" extends="Party"> > <property name="CompanyName"/> > </subclass> > </hibernate-mapping> > > > <?xml version="1.0" encoding="utf-8" ?> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > assembly="pruebas.nh.modelo" > namespace="pruebas.nh.modelo"> > <subclass name="Person" extends="Party"> > <property name="FirstName"/> > <property name="LastName"/> > </subclass> > </hibernate-mapping> > > > Sobre el query no debería haber ningún problema seria cosa que pruebes y > comentes > > > > El 2 de junio de 2011 16:52, Carlos Peix <[email protected]> escribió: > >> Sigo con este tema y tengo una duda con eager-loading. El modelo es el que >> mostre en el post anterior: Order tiene una referencia a Customer y Customer >> tiene una referencia a Party. >> >> Mappings: >> >> <class name="Order" table="Orders"> >> ... >> <many-to-one name="Customer" class="Customer" column="CustomerId"/> >> </class> >> >> <class name="Customer" table="Customers"> >> ... >> <many-to-one name="Party" cascade="save-update" >> unique="true" column="PartyId"/> >> </class> >> >> <import class="Party" /> >> <class name="Person" table="People"> >> ... >> <property name="FirstName"/> >> <property name="LastName"/> >> </class> >> >> <class name="Company" table="Companies"> >> ... >> <property name="CompanyName"/> >> </class> >> >> Con esto tengo dos temas, primero que me da un error de compilacion del >> mapping: "An association from the table Customers refers to an unmapped >> class: pruebas.nh.modelo.Party", a pesar del import. Que estoy haciendo mal? >> >> Luego me gustaria poder hacer este query (HQL) >> >> "from Order o join fetch o.Customer c join fetch c.Party p" >> >> Puedo hacer eso? >> >> Gracias! >> >> ---------------------------------- >> Carlos Peix >> >> 2011/6/1 Carlos Peix <[email protected]> >> >>> Hola gente, >>> >>> Quiero consultarles algo ya que estoy tratando de encontrar una forma de >>> mapeo mas o menos estandar para un problema mas o menos estandar en mis >>> modelos. La consulta no solo se relaciona con el mapeo en NH, tambien me >>> interesa determinar la estructura de BD mas adecuada. >>> >>> Basicamente es la relacion evento-rol-actor, para que quede mas claro, >>> permitanme conpartir algunas clases: >>> >>> // evento >>> public class Order { >>> Guid _id; >>> Customer _customer; >>> } >>> >>> // el rol >>> public class Customer { >>> Guid _id; >>> Party _actor; // (1) u Object _actor >>> } >>> >>> // actores (ver Fowler para teoria sobre Party/Company/Person y >>> accountability) >>> public class Company : Party { >>> Guid _id; >>> string _companyName; >>> } >>> >>> public class Person : Party { >>> Guid _id; >>> string _firstName; >>> string _lastName; >>> } >>> >>> (1) aqui puedo tener definida alguna clase base para los actores que >>> pueden adoptar el rol de customer (como seria el caso de Party) y otras >>> veces no, para lo cual tendre que usar Object. Entiendo que esto me lleva a >>> dos respuestas distintas a mi consulta. >>> >>> La pregunta es como me conviene mapear la propiedad _actor de Customer, >>> ya se en el caso en que esta deba ser de tipo Object o Party. >>> >>> He probado con any y con many-to-one. Este objeto Customer podria o no >>> utilizar el mismo valor para el Id que el actor. Opino que lo mejor seria >>> que no lo hagan. Por ahi con Guids no hay problema pero en otros casos me >>> restringe. >>> >>> Un punto adicional seria que, probablemente, necesite en la entidad >>> Company o Person una coleccion de todos los roles desempeñados, seria como >>> la relacion opuesta y, en este caso, definitivamente no los roles no van a >>> compartir ninguna clase base salvo, eventualmente, una interfaz "IRol". >>> >>> ---------------------------------- >>> Carlos Peix >>> >>> >> -- >> Para escribir al Grupo, hágalo a esta dirección: >> [email protected] >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >> > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano > -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
