NHibernate加入多列

时间:2015-11-04 10:17:58

标签: c# nhibernate nhibernate-xml-mapping

我正在使用NHibernate 2.2,我希望在XML映射中对两列进行简单的连接。

我们说我有两张桌子:

enter image description here

现在我想要一个简单的选择并加入两个表:

SELECT t1.*, t2.ProductionDate
FROM table1
JOIN table2 t2 ON t1.Name = t2.Name AND t1.Price = t2.Price

如何使用XML映射在NHibernate中执行此操作?

1 个答案:

答案 0 :(得分:2)

在XML映射中,您可以映射类之间的关系。只有你的班级有这样的关系:

  class Class1
  {
    public Class2 { get; set; }
  }

你可以映射这种关系。但通常需要使用主键进行关联。有一种方法可以使用property-ref来映射其他属性,但在那里它开始很奇怪,特别是当有多列进来时。

我怀疑你们班上有这样的关系。

因此,链接应仅在查询中进行。它类似于在SQL中执行此操作的方式。请注意"加入"在HQL中仅限于实际关系(如上所述),而不是任意属性比较(与SQL不同,没有区别)。

HQL:

select c1.*, c2.ProductionDate
from Class1 c1, Class2 c2
where c1.Name = c2.Name and c1.Price = c2.Price

使用Criteria是不可能的(除非使用子查询,否则您无法返回ProductionDate)。除了回退到SQL之外,没有办法使它成为外连接。

评论:您可能认为NHibernate在这方面没什么帮助。确实如此。原因是NHibernate是一个ORM,它允许您以面向对象的方式实现业务逻辑。你在这里的关系不是典型的面向对象关系。在纯粹的OO设计中,通常不用处理类的方式。