NHibernate запрос со многими ко многим - PullRequest
2 голосов
/ 16 августа 2011

Ситуация следующая: 1. Товар принадлежит многим категориям, 2. Категория имеет много товаров.

class Product
{
    public int Id { get; set; }
    public List<Category> Categories { get; set; }
}

class Category
{
    public int Id { get; set; }
    public List<Product> Products { get; set; }
}

Как получить все товары, где каждый из них относится к категории с id = 2 и3 и 4. Как сделать с queryover?На данный момент я использую динамически создаваемый hql:

select p from Product p where 
exists (select c.id from p.Categories c where c.Id = 2) 
and exists (select c.id from p.Categories c where c.Id = 3)
and exists (select c.id from p.Categories c where c.Id = 4)

И отображение:

public class ProductMap : ClassMap<Product>
{
    public ProductMap()
    {
        Id(x => x.Id);
        HasManyToMany(x => x.Categories)
            .Table("product_category")
            .ParentKeyColumn("product_id")
            .ChildKeyColumn("category_id");
    }
}

public class CategoryMap : ClassMap<Category>
{
    public CategoryMap()
    {
        Id(x => x.Id);
        HasManyToMany(x => x.Products)
            .Table("product_category")
            .ParentKeyColumn("category_id")
            .ChildKeyColumn("product_id");
    }
}

1 Ответ

0 голосов
/ 19 апреля 2012

Попробуйте, может быть, это поможет:

Category categoryAlias = null;
session.QueryOver<Product>()
  .JoinAlias(product => product.Categories, () => categoryAlias)
  .WhereRestrictionOn(() => categoryAlias.Id).IsIn(new [] { 2, 3, 4 })
  .List();
...