【问题标题】:LEFT JOIN tables with EJBQL使用 EJBQL 的 LEFT JOIN 表
【发布时间】:2011-05-11 22:06:27
【问题描述】:

我正在尝试使用 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”——但是当我使用 ON 时,EJBQL 会返回一个意想不到的关键字...

那么——以前有没有人成功地做过这样的事情? EJBQL 的文档似乎表明 LEFT join 是可以的,所以我不确定交易是什么......

谢谢


编辑:我得到的例外是:

outer or full join must be followed by path expression -- 和空指针deal埋在同一行

编辑 2:

机器和位置之间没有关系,不幸的是我无法改变它

【问题讨论】:

    标签: jakarta-ee jboss ejbql


    【解决方案1】:

    如果两者之间没有关系,并且如果你真的只需要Machineobject,你可以做的是将LEFT JOIN FETCH更改为IN语句,如(伪代码):

    select from Machine m 
    where (SUBSTRING(m.hostname, 1, :length) in (some kind of logic about Location)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2013-03-09
      相关资源
      最近更新 更多