2013-01-06 10 views
0

比方说,我们有一个对象模型是这样的:NHibernate的 - 标准来搜索分层数据有效

public class Category 
{ 
    public virtual Category Parent { get; set; } 
    public virtual string Name { get; set; } 
    public virtual ISet<Category> Children { get; protected set; } 
} 

public class Product 
{ 
    public virtual string Name { get; set; } 
    public virtual Category Category { get; set; } 
    public virtual decimal Price { get; set; } 
} 

在数据库方面,双方的关系将通过许多一对多关系表来实现的,所以数据模式将是这样的:

Category 
================= 
Id int PK 
Name varchar(50) 
Parent_Id int FK 

Product 
================= 
Id int PK 
Name varchar(50) 
Price money 

ProductToCategory 
================= 
Product_Id int PK 
Category_Id int PK 

现在,让我们在类别树假设是一个分支,看起来像这样:

  • 食品
    • 螺母
      • 腰果
      • 花生
      • 山核桃
    • 面包
      • 黑麦
      • 小麦
      • 白色

假设我们的产品与分配的可能只有一个子类,是有可能构建一个Criteria,将单一击中返回所有产品的Food类别的数据库和不使用CTE?

或者,由于不会有丰富的类别,最好是将完整的类别映射加载到内存中并构建标准,以便搜索产品where Category_Id in (...),记忆树?

回答

0

你将不得不使用CTE来做到这一点。我无法想象一个单独的SQL查询可以在不使用的情况下加载分层类别的所有产品,更不用说让NHibernate为您做。

或者,因为不会有种类丰富,倒不如加载完整类映射到内存中,并构建了标准,使得其搜索产品,其中在CATEGORY_ID(.. 。)并且该列表是在内存树中构建的?

是的。如果没有太多数据并且这是一个选项,那么这是最简单,最快速,低维护,最不复杂的方式。