首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用EJBQL的左连接表

使用EJBQL的左连接表
EN

Stack Overflow用户
提问于 2011-05-11 22:06:27
回答 1查看 3K关注 0票数 1

我正在尝试使用EJBQL (与底层的MySQL数据源)连接两个EJB。这两张表是

代码语言:javascript
复制
Machine
  - Hostname
  - ... unrelated fields ...

代码语言:javascript
复制
Location
 - Code
 - Human readable description

这些表应该放在位置代码和机器主机名的前三个字符上。在直接的MySQL中,命令是:

代码语言:javascript
复制
SELECT * FROM machine m LEFT JOIN location l ON (SUBSTRING(m.`Name`, 1,3) = l.`Code`);

当我将类似的内容放入EJBQL中时,我会得到各种各样的错误,从空沉思异常到无效语法异常--以下是我尝试过的:

代码语言:javascript
复制
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:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-31 02:19:35

如果两者之间没有关系,而且如果您确实只需要Machine对象,那么您可以做的是将LEFT JOIN FETCH更改为IN语句,如(伪代码)中所示:

代码语言:javascript
复制
select from Machine m 
where (SUBSTRING(m.hostname, 1, :length) in (some kind of logic about Location)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5971176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档