Hola Nestor,

2011/6/2 Nestor Rodriguez <[email protected]>

>
>    1. Bueno si mapeas a Party como Abstract = "True" no te genenera una
>    tabla.  Tambien podrias elegir mapear la herencia con <subclass...>.
>
> Si no me equivoco sugeris este mapping:

<class name="Party" abstract="true">
<id name="Id">
 <generator class="guid.comb"/>
</id>
</class>

<subclass name="Person" extends="Party" table="People">
<property name="FirstName"/>
 <property name="LastName"/>
</subclass>

 <subclass name="Company" extends="Party" table="Companies">
<property name="CompanyName"/>
 </subclass>

Pero falla con este error:  "XML validation error: The 'table' attribute is
not declared.", asumo que se debe al primer mapping


>    1. En el mapping del many to one te hace falta colocar el "class =
>    "Party".
>
> Pense que no hacia falta ya que la leer del tipo de la propiedad. Igual no
cambia anda agregando eso.


>    1. Y el query que quieres hacer si es posible, quizas prueba "select o
>    from Order o join fetch o.Customer c join fetch c.Party".
>
> Ese query falla con el mismo error que mencione antes.


>    1. Estas seguro que UNICAMENTE un cliente puede tener un party ? porque
>    si no es asi debes quitar el "unique = true".  El unique genera un
>    constraint en la llave foranea de cliente -> party
>
> Si, estoy seguro y es por diseno. Cuando creo el rol Customer es para uno y
solo un Party (Person o Company). es una relacion one-to-one pero he visto
que algunos recomiendan una many-to-one con el unique="true"

Saludos,
> Nestor Andres Rodriguez
>
>
Muchas gracias

----------------------------------
Carlos Peix


> 2011/6/2 Carlos Peix <[email protected]>
>
>> 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
>>
>
>  --
> 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

Responder a