NHibernate - 使用条件查询检索特定列和计数
这是我的映射文件:
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>
这是另一个带有连接子类的文件
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>
我怎样才能使用条件进行此查询?
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
多谢!
多谢!它解决了我的部分问题。我这样做了:
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>());
我使用 Transformer 来创建 Contacto
实体的集合,但问题出在属性 Apellido
上。我将它放在子类 Persona 中,并且该集合仅与父类一起创建,而不与子类一起创建。
你知道是否可以解决这个问题吗?或者我唯一的解决方案是抛出每个集合项,而不使用转换器并创建一个新的 Contacto 实体集合来创建每个新对象?
谢谢!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您想使用投影。像这样的事情:
更新 - 我刚刚注意到您正在使用 NHibernate,并且我是 Java 用户,因此我给出的代码片段可能需要根据您的使用进行调整。希望有帮助。
You want to use projections. Something like this:
UPDATE - I just noticed that you're using NHibernate, and I'm a Java user so the code snippet I gave may need to be tweaked for your use. Hope it helps.