我有一个 Category 类型和一个 Item 类型,它们之间有一个双向的多对多关系。这种关系的双方都很懒惰。我想用 HQL 或 ICriteria 编写一个查询,它执行以下操作:给定一个类别的 ID,加载其所有项目以及(急切地加载)这些项目的类别集合。这样的查询会是什么样子?
我做到了:
session.CreateQuery( "from Category c left join fetch c.Items where c.ID = :cid" )
.SetParameter( "cid", ofCategory.ID )
.List();
但我不知道如何适应急切加载每个项目的类别集合的部分。
请注意,我已经使用 NHibernateUtil.Initialize() 让它工作了。然而,为了教育起见,我想尝试一种不同的方式——可能更优雅的方式。因此,它目前通过首先在相关的 Item 和类别实例上调用 ISession.Lock() 来工作,然后:
foreach ( Item i in ofCategory.Items ) {
if ( !NHibernateUtil.IsInitialized(i.Categories) )
NHibernateUtil.Initialize( i.Categories );
}