Jakarta ee - 使用 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 中放入类似的东西时,我会收到从空 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)

相关内容

  • 没有找到相关文章

最新更新