NHibernate联接筛选器(带子句?)
我试图找到一种使用HQL对连接对象进行过滤的方法。Exmaple:NHibernate联接筛选器(带子句?),nhibernate,join,Nhibernate,Join,我试图找到一种使用HQL对连接对象进行过滤的方法。Exmaple: from Cat as cat inner join tableX as x left join tableY as y with x.someID = y.someID 我知道with子句可以很好地处理参数:param,如下所示: from Cat as cat inner join tableX as x left join tableY as y with
from Cat as cat
inner join tableX as x
left join tableY as y
with x.someID = y.someID
我知道with子句可以很好地处理参数:param,如下所示:
from Cat as cat
inner join tableX as x
left join tableY as y
with x.someID = :param
但在我的例子中,我没有参数
更新:
这里有更多的信息:
Table Cat TableX: TableY:
--------- ------ --------
PK ID PK EntityID PK EntityID
Column 1 Column State Column State
Column 2 Column 1 Column 1
Column 3 Column 2
表Cat和表Y具有一对一映射。
表Cat和表X具有一对多映射
我主要想在HQL中说:
SQL: SELECT *
FROM Cat c
INNER JOIN TableX x on c.ID = x.EntityID
LEFT JOIN TableY y on x.EntityID = y.EntityID and x.State = y.State
对此有什么想法或解决方法吗
提前谢谢你 我相信如果没有映射关联,您想要实现的目标是不可能的。您不能进行外部θ连接,只能进行交叉和内部连接。第一个查询不起作用吗?不,只有第二个起作用,它不允许我在WITH子句中放置表别名,仅参数:对不起,原来的标题把我弄糊涂了。有什么原因不能只使用where子句吗?在这种情况下,由于左连接,如果我将x.someID=y.someID放在where中,结果集会完全不同。我需要特别使用左连接。我会尝试用更多的信息更新上面的例子。谢谢你的回答。。。在这种情况下,如何进行映射以使NHibernate在左侧外部联接中添加AND?我正在研究这个问题已经有一段时间了,我也没有看到一个映射给我这个。。。谢谢你的帮助。Thanks@Akrion,我真的不知道你的域名。您可以在这两个实体之间建立关联。也就是说,如果这两个实体在您的领域中相互了解没有意义,并且您需要一个在HQL中无法完成的非常具体的查询,那么不要害怕使用好的老式SQL。您可以从SQL查询返回实体。好的旧SQL的问题是,代码依赖HQL IQuery ReturnAlias方法来获取列别名,但如果使用NHibernate,就我所知,它不会提供有关返回结果集的任何信息。。。没有填充任何集合。。。没有ReturnAlias,没有ReturnTypes等等@Akrion,我不是说使用命名sql查询,尽管您可以。再次阅读有关将根实体和联接添加到sql查询的链接。