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