2011-05-11 80 views
1

我想要使用EJBQL(具有底层的MySQL数据源)连接两个EJB。有问题的两个表是使用EJBQL的LEFT JOIN表

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我得到的所有类型的错误,从空poninter例外无效的语法例外raning的 - 这是我曾尝试:

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回来了,当我使用上的意外关键字...

所以 - 有没有人在成功之前做这样的事情?对于EJBQL的文件似乎表明,LEFT JOIN是确定的,所以我不知道这笔交易是什么...

感谢


编辑:我得到的例外是:

outer or full join must be followed by path expression - 它葬在同一行空指针交易

编辑2:

有一台机器和地点,联合国没有关系幸运的是我不能改变的

回答

0

如果在两者之间没有关系,如果你真的只需要Machine对象,你可以做的就是改变LEFT JOIN FETCHIN声明,如(伪代码):

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