我使用的是NHibernate 2.2,我想通过XML映射中的两列进行简单连接。NHibernate加入多列
比方说,我有两个表:
现在我想要一个简单的选择,并加入了两个表:
SELECT t1.*, t2.ProductionDate
FROM table1
JOIN table2 t2 ON t1.Name = t2.Name AND t1.Price = t2.Price
我怎样才能做到这一点NHibernate的与XML的映射?
我使用的是NHibernate 2.2,我想通过XML映射中的两列进行简单连接。NHibernate加入多列
比方说,我有两个表:
现在我想要一个简单的选择,并加入了两个表:
SELECT t1.*, t2.ProductionDate
FROM table1
JOIN table2 t2 ON t1.Name = t2.Name AND t1.Price = t2.Price
我怎样才能做到这一点NHibernate的与XML的映射?
在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,可以让你以面向对象的方式实现你的业务逻辑。你在这里的关系不是典型的面向对象的关系。这不是你在纯粹的面向对象设计中通常处理类的方式。
感谢您的回答!我最终在xml部分使用了一个查询。我这样做了,所以我可以将我的代码中的引用更改为特定的文件。我需要这个以保持与不同的数据库版本兼容。 – Franki1986