2011-08-16 7 views
2

状況は次のとおりです。 1.製品は多くのカテゴリに属します。 2.カテゴリには多くの製品があります。多対多のNHibernate問合せオーバー

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のカテゴリに属する​​すべての製品を持つ方法です。

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"); 
    } 
} 

答えて

0

多分それは助けだ、これを試してみてください:

Category categoryAlias = null; 
session.QueryOver<Product>() 
    .JoinAlias(product => product.Categories,() => categoryAlias) 
    .WhereRestrictionOn(() => categoryAlias.Id).IsIn(new [] { 2, 3, 4 }) 
    .List(); 
私は動的に作成HQLを使う瞬間