nhibernate manytomany查询

时间:2011-08-18 12:35:22

标签: nhibernate criteria

我是nhibernate的新手,并尝试在数据库上创建一个查询,其中包含项目和类别之间的多个链接。

我有一个包含3个表的数据库:项目,类别和查找表categoryitem,如下所示:

  • 类别 - 主键类别ID

  • items - 主键itemId

  • categoryItem - categoryId列和itemId列

我想要一个查询返回特定类别的项目,并尝试了这一点,并认为我是在正确的方向:

public IList<Item> GetItemsForCategory(Category category)
        {

//detached criteria

DetachedCriteria itemIdsCriteria = DetachedCriteria.For(typeof(Category))     
                .SetProjection(Projections.Distinct(Projections.Property("Item.Id")))     
                .Add(Restrictions.Eq("Category.Id", category.Id)); 

                 criteria.Add(Subqueries.PropertyIn("Id", itemIdsCriteria));

            return criteria.List<Item>() as List<Item>;


}

我只有类别和项目的业务对象。 如何创建存储库方法来查找特定类别的项目?

1 个答案:

答案 0 :(得分:1)

我认为你的课程看起来像这样:

class Item
{
  // id and stuff
  IList<Category> Categories { get; private set; }
}

class Category
{
  // id and stuff
}

查询(HQL)

session.CreateQuery(@"select i
from Item i
  inner join i.Categories c
where 
  c = :category")
.SetEntity("category", category)

标准

session
  .CreateCriteria(typeof(Item))
  .CreateCriteria("Categories", "c")
  .Add(Restrictions.Eq("c.Id", category.Id))