Hi Carlos, el query que estas haciendo ahi es algo como select P.*, T.* FROM
Project P LEFT JOIN Ticket T
El cual trae todos los P y los T en una query y tantas filas como matches
alla en T y para el caso del projecto sin T trae nulos en T
es decir tiene que traer 6...
No tengo claro que esperas que devuelva la consulta...a mi gusto tiene que
devolver 6 exactamente como esta devolviendo.
Gustavo.
On Wed, Jun 25, 2008 at 8:10 PM, Carlos Peix <[EMAIL PROTECTED]> wrote:
>
> Nhibernate 1.2.1.4000, .NET 1.1
>
> Tengo el siguiente caso, dos clases:
>
> // Clase Project
> public class Project
> {
> //...
> private string code;
>
> private IList tickets = new ArrayList();
> public IList Tickets
> {
> get { return ArrayList.ReadOnly(tickets); }
> }
>
> public Ticket AddTicket( string ticketText )
> {
> Ticket ticket = new Ticket(this, ticketText);
> tickets.Add( ticket );
> return ticket;
> }
> }
>
> // y clase ticket
> public class Ticket
> {
> public Ticket(Project project, string text)
> {
> this.project = project;
> this.text = text;
> }
>
> //...
>
> private Project project;
> public Project Project
> {
> get { return project; }
> }
>
> //...
> }
>
> Mapeados asi:
>
> <class name="Project" table="Projects">
>
> <id name="Id" column="Id">
> <generator class="guid"/>
> </id>
>
> <property name="Code" />
> <property name="Description" />
> <bag name="Tickets" inverse="true"
> cascade="all-delete-orphan" lazy="true">
> <key column="IdProject" />
> <one-to-many class="Ticket" />
> </bag>
>
> </class>
> Y
> <class name="Ticket" table="Tickets">
>
> <id name="Id" column="Id">
> <generator class="guid"/>
> </id>
>
> <property name="Text" />
> <many-to-one name="Project" column="IdProject"
> class="Project" />
>
> </class>
>
> Luego creo tres proyectos en la base de datos:
>
> Project project1 = new Project("1", "Project 1");
> project1.AddTicket( "Ticket 1" );
> project1.AddTicket( "Ticket 2" );
>
> Project project2 = new Project("2", "Project 2");
> project2.AddTicket( "Ticket 1" );
> project2.AddTicket( "Ticket 2" );
> project2.AddTicket( "Ticket 3" );
>
> Project project3 = new Project("3", "Project 3");
>
> Ahora veamos el problema:
>
> IQuery query = s.CreateQuery( "from Project as p left join fetch
> p.Tickets order by p.Code" );
> IList list = query.List();
> Assert.AreEqual( 3, list.Count );
>
> Este test falla, list.Count es igual a 6!, que es igual a la cantidad filas
> que devuelve el join. Dentro del IList tengo dos entradas a la misma
> instancia del projecto 1, tres a la del proyecto 2 y 1 del proyecto 3.
> Quiero usar el join fetch para que me cargue todos proyectos y tickets en
> un
> solo query.
>
> Por que? Hicimos algo mal?
>
> Si alguno esta interesado, tengo un proyecto con tests que demuestran esto
> y
> generan automaticamente la BD.
>
> 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
-~----------~----~----~----~------~----~------~--~---