【问题标题】:select in Nhibernate by HQL通过 HQL 在 Nhibernate 中选择
【发布时间】:2011-07-28 03:27:35
【问题描述】:

我有一些映射:

<class entity-name="Person" table="table1">
<id column="Id" type="long" name="Id"/>
<set name="Address">
<key column="Person_id"/>
<one-to-many class="Address"/>
</set>
<property column="Id" name="Id" type="long"/>
<property column="Last_Name" name="LastName" type="string"/>
<property column="First_Name" name="FirstName" type="string"/>
<property column="Education" name="Education" type="string"/>   
</class>

<class entity-name="Address" table="table2">
<id column="Id" type="long" name="Id"/>
<property column="Id" name="Id" type="long"/>
<property column="City" name="City" type="long"/>
<property column="Street" name="Street" type="string"/>
<property column="number" name="number" type="string"/>
</class>

这是我的 HQL 查询 hbm="from person p join fetch p.Address WHERE p.id in (:ids)"

但现在我从两个表(地址和人)中选择 * 我需要重新定义姓氏、人名和包含 City 、 Street 的 Addresses 集合的 HQL

我如何在地址字段上添加条件??

【问题讨论】:

  • 有什么想法吗??可能是不可能的??

标签: nhibernate hql


【解决方案1】:

添加 Select p 以仅返回 Person。 为 Address 添加别名,以便您可以在 where 子句(条件)中使用它。

select p from person p join fetch p.Address ad WHERE p.id in (:ids) and a.City = :city

【讨论】:

  • 返回 Person 的所有字段。我需要在 Person 字段上进行投影,在 Address 字段上进行投影。换句话说,人列的一部分和地址列的一部分。
【解决方案2】:

这个查询呢?

select p.FirstName, p.LastName, a.City, a.Street from Person p inner join p.Addresses a WHERE p.Id in (:id) and a.City=:city

则结果集合包含对象数组:

var resultList = query.List();
foreach (object[] result in resultList)
{
    Console.WriteLine("Person.FirstName = {0}", result[0]);
    Console.WriteLine("Person.LastName = {0}", result[1]);
    Console.WriteLine("Address.City = {0}", result[2]);
    Console.WriteLine("Address.Street = {0}", result[3]);
}

【讨论】:

  • 但如果一个人有 50 个地址。此查询返回 50 行。并且每一行都包含 FirstName 、 LastName 、 City 和 Street 。并且需要一条包含 FirstName 、 LastName 以及大小为 50 的 City 和 Street 的集合
  • 是的,这就是内部连接的工作方式。即使一个人有 1000 个地址,IMO 这种重复也不是问题。如果发现两个人,你会怎么做?您有 2 个结果集:第一个结果集中包含 FirstName 和 LastName 的 2 行,第二个结果集中包含 City 和 Street 的 50 行。您将如何将这两个结果集中的行配对?或者你不需要?
猜你喜欢
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
相关资源
最近更新 更多