2015-11-04 57 views
0

我使用的是NHibernate 2.2,我想通过XML映射中的两列进行简单连接。NHibernate加入多列

比方说,我有两个表:

enter image description here

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

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

我怎样才能做到这一点NHibernate的与XML的映射?

回答

1

在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 

这是不可能的标准(除非使用子查询,但你不能返回ProductionDate)。除了回退到SQL之外,没有办法使它成为外部联接。

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

+0

感谢您的回答!我最终在xml部分使用了一个查询。我这样做了,所以我可以将我的代码中的引用更改为特定的文件。我需要这个以保持与不同的数据库版本兼容。 – Franki1986