您的查询是有效的 JPQL,并且不使用特定于 Hibernate 的功能(缺少 bar 和 from 之间的空格)。在 JPA 2.0 规范(4.4.5 连接)中,用以下文字对此进行了解释:
可以通过在 FROM 子句中使用笛卡尔积和在 WHERE 子句中使用连接条件来隐式指定内连接。在没有连接条件的情况下,这简化为笛卡尔积。
这种通用连接样式的主要用例是当连接条件不涉及映射到实体关系的外键关系时。例:SELECT c FROM Customer c, Employee e WHERE c.hatsize = e.shoesize
与查询的主要区别在于,您的选择包含两种类型的实体。查询的结果是对象列表[]。数组中元素的顺序与 select 语句中的顺序相同。以下工作在你的情况下:
String query =
"select foo, bar from FooEntity as foo, BarEntity as bar "+
"where foo.someothercol = 'foo' and foo.somecol = bar.somecol";
List<Object[]> results = em.createQuery(query).getResultList();
for (Object[] fooAndBar: results) {
FooEntity foo = (FooEntity) fooAndBar[0];
BarEntity bar = (BarEntity) fooAndBar[1];
//do something with foo and bar
}