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
