创建一个"where "HQL查询

本文关键字:quot HQL 查询 where 一个 创建 | 更新日期: 2023-09-27 18:06:39

我在编写使用"where in"子句的HQL查询时遇到了麻烦。

简化的类如下所示:

class Parent
{
    public virtual Int64 Id { get; private set; }
    public virtual string Name { get; private set; }
}
class Child
{
    public virtual Int64 Id { get; private set; }
    public virtual string Name { get; private set; }
    public virtual Parent Parent { get; private set; }
}

的映射定义如下:

class ParentMap : ClassMap<Parent>
{
    Id(x => x.Id);
    Map(x => x.Name);
}
class ChildMap : ClassMap<Child>
{
    Id(x => x.Id);
    Map(x => x.Name);
    References(x => x.Parent);
}

我想获得属于某些Parent项的Child实例,因此我编写了以下代码:

// get children for several parents (a flattened list)
IEnumerable<Parent> parents = GetParents();
// use hql
IQuery q = Session.CreateQuery("from Child as c where c.Parent in (:parents)");
q.SetParameter("parents", parents);

但问题是,我在q.SetParameter得到以下异常:

<>之前测试方法Can_get_children_for_many_parents抛出异常:NHibernate。PropertyAccessException:Some.Namespace.Parent.Id的getter发生异常System.Reflection.TargetException:对象不匹配目标类型。之前

[编辑]

我尝试使用q.SetParameter("parents", parents.Select(p => p.Id);,但我得到同样的异常。

创建一个"where "HQL查询

试试这样:

q.SetParameterList("parents", parents.ToList());