nhibernate 多对多查询

发布于 2024-11-30 03:35:23 字数 845 浏览 0 评论 0原文

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

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

  • categorys - 主键categoryId

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


}

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

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时间海 2024-12-07 03:35:23

我假设你的类看起来像这样:

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

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))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文