从 nhibernate 中的复合 ID 列表中加载对象

Posted

技术标签:

【中文标题】从 nhibernate 中的复合 ID 列表中加载对象【英文标题】:loading objects from a list of composite-ids in nhibernate 【发布时间】:2011-06-24 14:43:19 【问题描述】:

我想要做的是构建一个 HQL 查询,它接受一个 id 列表并返回一个加载的对象列表。过了一会儿,我发现这样的东西可以工作

from Foo foo where foo.ID in (:IdList)

但是,这仅适用于单个 id,因为当我尝试将其用于复合 id 时,应用程序会引发下一个异常:

System.ArgumentOutOfRangeException : 索引超出范围。必须是非负数且小于集合的大小。参数名称:索引

我一无所知...

我为我的 id 对象创建了一个自定义类型,希望我可以解释 hibernate 如何使用它,但它没有成功。

那么你有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

我想不出可以做到这一点的 sqlquery(据我所知,In 不能将对作为输入)

这是否足够(在我的头顶上,现在无法测试)?

var query = "from Foo foo where ";

for (int i = 0; i < idlist.Count; i++)

    query += "OR foo.ID = :p" + i;


var hqlquery = session.CreateQuery(query);
for (int i = 0; i < idlist.Count; i++)

    hqlquery.SetParameter("p" + i, idlist[0]);

【讨论】:

以上是关于从 nhibernate 中的复合 ID 列表中加载对象的主要内容,如果未能解决你的问题,请参考以下文章

Fluent NHibernate 多对多映射,使用自动生成的 pk 而不是复合键

Nhibernate一对多关系复合键问题

如何在 Fluent NHibernate 中将一对一关系映射为复合键的一部分

NHibernate 复合键

在 Nhibernate 中加载与获取

NHibernate中的批量更新