Ceci est mon fichier de mapping:NHibernate - Récupérer des colonnes spécifiques et compte en utilisant des critères requête
class name="CRMStradCommon.Entities.OportunidadEntity,CRMStradCommon" table="oportunidad">
<id name="Id" column="id" type="int">
<generator class="native" />
</id>
<property name="Titulo" column="titulo" type="string" not-null="true" />
<many-to-one name="Estado" column="estado" class="CRMStradCommon.Entities.EstadoOportunidadEntity,CRMStradCommon" />
<many-to-one name="Dueno" column="dueno" class="CRMStradCommon.Entities.ContactoEntity,CRMStradCommon" />
<property name="FechaCierreEstimado" column="fecha_cierre_estimado" type="DateTime" not-null="false"/>
<property name="FechaVencimiento" column="fecha_vencimiento" type="DateTime" not-null="false"/>
</class>
Ceci est l'autre joint-sous-classe
class name="CRMStradCommon.Entities.ContactoEntity,CRMStradCommon" table="contacto" dynamic-update="true">
<id name="Id" column="id" type="int">
<generator class="native" />
</id>
<property name="Nombre" column="nombre" type="string" not-null="true" />
<property name="Email1" column="email1" type="string" />
<property name="Email2" column="email2" type="string" />
<property name="Web1" column="web1" type="string" />
<property name="Web2" column="web2" type="string" />
<bag name="DuenoOportunidadList" lazy="true" inverse="true">
<key column="dueno"/>
<one-to-many class="CRMStradCommon.Entities.OportunidadEntity,CRMStradCommon"/>
</bag>
<joined-subclass name="CRMStradCommon.Entities.EmpresaEntity,CRMStradCommon" table="empresa" lazy="false">
<key column="id" />
<many-to-one name="Categoria" column="categoria" class="CRMStradCommon.Entities.CategoriaEmpresaEntity,CRMStradCommon" />
<many-to-one name="Calificacion" column="calificacion" class="CRMStradCommon.Entities.CalificacionEmpresaEntity,CRMStradCommon" />
</joined-subclass>
<joined-subclass name="CRMStradCommon.Entities.PersonaEntity,CRMStradCommon" table="persona" lazy="false">
<key column="id" />
<property name="Saludo" column="saludo" type="string" />
<property name="Apellido" column="apellido" type="string" />
<property name="SegundoNombre" column="segundo_nombre" type="string" />
</joined-subclass>
</class>
Comment puis-je faire cette requête avec des critères?
SELECT
contacto.id, contacto.nombre, persona.apellido, COUNT(*) AS Cant
FROM
contacto
INNER JOIN
oportunidad ON contacto.id = oportunidad.dueno
LEFT OUTER JOIN
persona ON contacto.id = persona.id
LEFT OUTER JOIN
empresa ON contacto.id = empresa.id
GROUP BY
contacto.id, contacto.nombre, persona.apellido
ORDER BY
contacto.nombre, persona.apellido
Merci beaucoup!
Merci beaucoup! Cela a résolu une partie de mon problème. Je l'ai fait:
ICriteria criteria = session.CreateCriteria(typeof(ContactoEntity));
criteria.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("Id"),"Id")
.Add(Projections.GroupProperty("Nombre"),"Nombre")
.Add(Projections.GroupProperty("Apellido"), "Apellido")
.Add(Projections.GroupProperty("TipoContacto"), "TipoContacto")
.Add(Projections.RowCount(),"CantOportunidadesDueno"));
criteria.CreateCriteria("DuenoOportunidadList");
criteria.AddOrder(Order.Asc("Nombre")).AddOrder(Order.Asc("Apellido"));
criteria.SetResultTransformer(
new NHibernate.Transform.AliasToBeanResultTransformer(typeof(ContactoEntity)));
IList<ContactoEntity> ContLst = (criteria.List<ContactoEntity>());
je transformateur afin de faire une collection de Contacto
entités, mais le problème est la propriété Apellido
. Je l'ai dans la sous-classe Persona et la collection est faite uniquement avec la classe parente et non avec les classes enfants. Savez-vous s'il est possible de résoudre ce problème?
ou la seule solution que j'ai est d'aller jeter chaque élément de collection sans utiliser de transformateur et de créer une nouvelle collection d'entités Contacto créant chaque nouvel objet?
Merci !!!