如何为NHibernate 2.0 HQL查询中的左连接提供条件。
例如在SQL中。
select t1.* from table1 t1
left join table t2 on t2.id = t1.id and t2.column2 = t1.column2
我尝试了下面的HQL查询,但得到了一个异常"意外令牌:"
select t1 from Table1 t1
left join t1.Table2 t2 with t2.column 2 = t1.column2
答案 0 :(得分:0)
无需在(ON
或任何其他) LEFT
上使用JOIN
语句。该条件将通过映射注入。有HQL doc:
所以,这个HQL会起作用:
SELECT t1 from Entity1 AS t1
LEFT JOIN t1.ReferencePropertyToEntity2 t2
生成的sql将是这样的:
SELECT t1 from Table1 AS t1
LEFT JOIN Table2 t2
ON t1.ReferenceColumnToTable2 = t2.Table2_ID
但是,如果我们想要进行更多限制,我们可以使用更多条件扩展 ON
子句 - 但它们将全部应用 AND
强>
SELECT t1 from Entity1 AS t1
LEFT JOIN t1.ReferencePropertyToEntity2 t2
WITH t2.IsActive = 1
OR t1.IsDeleted = 0
将导致
SELECT t1 from Table1 AS t1
LEFT JOIN Table2 t2
ON t1.ReferenceColumnToTable2 = t2.Table2_ID
AND (
t2.IsActive = 1 OR t1.IsDeleted = 0
)
因此,如果我们想使用WITH来完全替换映射生成的ON,我们必须采用不同的方式 - 使用CROSS JOIN: