简体   繁体   中英

nhibernate manytomany query

I am new to nhibernate and trying to create a query on a database with manytomany links between items and categories.

I have a database with 3 tables : items, categories and a lookup table categoryitem like this:

  • categorys - primary key categoryId

  • items - primary key itemId

  • categoryItem - categoryId column and itemId column

I want a query returning items for a particular category and have tried this and think i am along the right lines:

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>;


}

I only have business objects for category and item. how do i create a repository method to find items for a particular category?

I assume that your classes look like this:

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

class Category
{
  // id and stuff
}

query (HQL)

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

Criteria

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM