Я пытаюсь объединить два 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:
Нет никакой связи между машиной и местоположением,к сожалению я не могу это изменить