我正在尝试使用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中时,我会得到各种各样的错误,从空沉思异常到无效语法异常--以下是我尝试过的:
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在使用ON.
以前有人成功做过这样的事吗?EJBQL的文档似乎表明LEFT是可以的,所以我不确定交易是什么.
谢谢
编辑:我得到的例外是:
outer or full join must be followed by path expression --它被埋在与空指针处理相同的行中。
编辑2:
机器和位置之间没有关系,不幸的是,我无法改变这一点
发布于 2011-07-31 02:19:35
如果两者之间没有关系,而且如果您确实只需要Machine对象,那么您可以做的是将LEFT JOIN FETCH更改为IN语句,如(伪代码)中所示:
select from Machine m
where (SUBSTRING(m.hostname, 1, :length) in (some kind of logic about Location)https://stackoverflow.com/questions/5971176
复制相似问题