我是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>;
}
我只有类别和项目的业务对象。 如何创建存储库方法来查找特定类别的项目?
答案 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))