LEFT JOIN таблицы с EJBQL - PullRequest
       17

LEFT JOIN таблицы с EJBQL

1 голос
/ 12 мая 2011

Я пытаюсь объединить два EJB с помощью EJBQL (с базовым источником данных MySQL).Обсуждаются две таблицы:

Machine
  - Hostname
  - ... unrelated fields ...

и

Location
 - Code
 - Human readable description

Таблицы должны быть ЛЕВЫМИ, соединенными с кодом местоположения и первыми тремя символами имени хоста машины.В прямой версии MySQL команда выглядит следующим образом:

SELECT * FROM machine m LEFT JOIN location l ON (SUBSTRING(m.`Name`, 1,3) = l.`Code`);

Когда я помещаю аналогичную вещь в EJBQL, я получаю всевозможные ошибки, начиная от исключений нулевого указателя до недопустимых синтаксических исключений - вот что я пробовал:*

query="SELECT NEW someObj(m, loc) FROM Machine as m " +
      "LEFT JOIN FETCH Location as loc " +
      "WHERE (SUBSTRING(m.hostname, 1, :length) = loc.code)"

Я также пытался использовать "ON" вместо "WHERE" - но EJBQL возвращается с неожиданным ключевым словом, когда я использую ON ...

Итак - кто-нибудь преуспелделать что-то подобное раньше?Документация для EJBQL, похоже, указывает на то, что ЛЕВОЕ присоединение в порядке, поэтому я не уверен, в чем заключается суть ...

Спасибо


Редактировать: получаю исключение::

outer or full join must be followed by path expression - он был похоронен в той же строке, что и сделка с нулевым указателем

Редактировать 2:

Нет никакой связи между машиной и местоположением,к сожалению я не могу это изменить

1 Ответ

0 голосов
/ 31 июля 2011

Если между этими двумя понятиями нет никакой связи, и если вам действительно нужен только объект Machine, то вы можете изменить LEFT JOIN FETCH на оператор IN, как в (псевдокоде):

select from Machine m 
where (SUBSTRING(m.hostname, 1, :length) in (some kind of logic about Location)
...