Hibernate连接到具有超类属性的类

时间:2013-07-13 19:49:58

标签: java hibernate hql

我有以下关系:

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:期望加入的路径!

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

请帮帮我:)。

1 个答案:

答案 0 :(得分:1)

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

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

来自Hibernate Core Reference Manual

  

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