Jakarta ee 使用ejbcl左连接表
我正在尝试使用EJBQL(使用底层MySQL数据源)连接两个EJB。这两张桌子是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中时,我会遇到各种各
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)