使用EJBQL的LEFT JOIN表

时间:2011-05-11 22:06:27

标签: java-ee jboss ejbql

我正在尝试使用EJBQL(带有底层MySQL数据源)加入两个EJB。有问题的两个表是

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中添加类似的东西时,我会遇到从null poninter异常到无效语法异常的各种错误 - 这是我尝试过的:

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” - 但是当我使用ON时,EJBQL会返回一个意外的关键字......

那么 - 有没有人成功做过这样的事情呢? EJBQL的文档似乎表明LEFT join是正常的,所以我不确定这笔交易是什么......

由于


编辑:我得到的例外是:

outer or full join must be followed by path expression - 它被隐藏在与空指针交易相同的行中

编辑2:

机器和位置之间没有关系,遗憾的是我无法改变

1 个答案:

答案 0 :(得分:0)

如果两者之间没有关系,并且您真的只需要Machine对象,那么您可以做的是将LEFT JOIN FETCH更改为IN语句,如(伪代码):

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