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

Responder a