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
-~----------~----~----~----~------~----~------~--~---

Responder a