我正在尝试使用 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 中放入类似的东西时,我会收到从空 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 加入是可以的,所以我不确定交易是什么......
谢谢
编辑:我得到的例外是:
outer or full join must be followed by path expression
-- 它与空指针交易埋在同一行中
编辑 2:
机器和位置之间没有关系,不幸的是我无法改变这一点
如果两者之间没有关系,并且您确实只需要 Machine
对象,您可以做的是将LEFT JOIN FETCH
更改为 IN
语句,如 (伪代码):
select from Machine m
where (SUBSTRING(m.hostname, 1, :length) in (some kind of logic about Location)