0

我有以下关系:

class A
{
  id;
}

class B extends A
{
   //other fields...
}

class C
{
    A a; 
}

我想这样写HQL:

select b from B as b left join C c on c.a.id = b.id. 

但我得到一个 org.hibernate.hql.ast.QuerySyntaxException: Path expected for join!

在这种情况下,左连接对我来说很重要。我尝试使用子选择,但存在性能问题。

请帮我 :)

4

1 回答 1

1

使用从 C 到 A 的右连接,并使用特殊属性.class进行过滤以仅从 B 中选择项目。

select a from C as c right join c.a as a
  with a.class = 'B'

休眠核心参考手册

在多态持久性的情况下,特殊属性class访问实例的鉴别器值。嵌入在 where 子句中的 Java 类名将被转换为它的鉴别器值。

于 2013-07-13T20:33:50.823 回答