Путь HQL, ожидаемый для соединения (при соединении с одной и той же таблицей) - PullRequest
3 голосов
/ 31 августа 2011

Я пытаюсь получить пары измерений для двух разных устройств, соединенных на равных метках времени. В SQL это работает как ожидалось:

select
  leftItem.Timestamp, leftItem.Value, rightItem.Value
from
  DataTable leftItem
  inner join DataTable rightItem
  on leftItem.Timestamp = rightItem.Timestamp
where
  leftItem.Device = 1 and rightItem.Device = 2

Но если я попытаюсь преобразовать его в HQL:

select
  left, right 
from
  DataTable as left 
  inner join DataTable as right
  on left.Timestamp = right.Timestamp
where
  left.Device = 1 and right.Device = 2

Я получаю NHibernate.Hql.Ast.ANTLR.SemanticException:

Path expected for join!

Как мне указать "путь" к той же таблице?

1 Ответ

6 голосов
/ 31 августа 2011

В HQL объединения могут выполняться только при связях между сущностями.Если вы хотите объединить что-то еще, единственная возможность - сделать объединение в предложении where:

select left, right 
from
  DataTable as left, DataTable as right
where
  left.Timestamp = right.Timestamp
  and left.Device = 1 
  and right.Device = 2
...