在NHibernate 2中使用Left Join进行HQL查询

时间:2015-09-03 01:40:15

标签: sql nhibernate hql

如何为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

1 个答案:

答案 0 :(得分:0)

无需在ON或任何其他) LEFT上使用JOIN语句。该条件将通过映射注入。有HQL doc:

14.3. Associations and joins

所以,这个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: