Jakarta ee 使用ejbcl左连接表

Jakarta ee 使用ejbcl左连接表,jakarta-ee,jboss,ejbql,Jakarta Ee,Jboss,Ejbql,我正在尝试使用EJBQL(使用底层MySQL数据源)连接两个EJB。这两张桌子是 Machine - Hostname - ... unrelated fields ... 及 这些表应该在位置代码和机器主机名的前三个字符上保持连接。在直接MySQL中,命令是: SELECT * FROM machine m LEFT JOIN location l ON (SUBSTRING(m.`Name`, 1,3) = l.`Code`); 当我将类似的东西放入EJBQL中时,我会遇到各种各

我正在尝试使用EJBQL(使用底层MySQL数据源)连接两个EJB。这两张桌子是

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

这些表应该在位置代码和机器主机名的前三个字符上保持连接。在直接MySQL中,命令是:

SELECT * FROM machine m LEFT JOIN location l ON (SUBSTRING(m.`Name`, 1,3) = l.`Code`);
当我将类似的东西放入EJBQL中时,我会遇到各种各样的错误,从空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的文档似乎表明左连接是可以的,所以我不确定交易是什么

谢谢


编辑:我得到的例外是:

外部联接或完全联接后面必须跟路径表达式
——它与空指针处理埋在同一行中

编辑2:


机器和位置之间没有关系,不幸的是,如果两者之间没有关系,并且如果您真的只需要
Machine
对象,那么我无法更改它,您可以做的是将
LEFT JOIN FETCH
更改为
IN
语句中的
,如(伪代码):

query="SELECT NEW someObj(m, loc) FROM Machine as m " +
      "LEFT JOIN FETCH Location as loc " +
      "WHERE (SUBSTRING(m.hostname, 1, :length) = loc.code)"
select from Machine m 
where (SUBSTRING(m.hostname, 1, :length) in (some kind of logic about Location)