2

假设我有 3 个抽象超类SuperASuperBSuperC. 假设这些超类中的每一个都有很多更具体的实现,并且所有超类都用@Inheritance(strategy = InheritanceType.JOINED).

更详细:

  • Aa<-SuperA并且有一个SuperBbbs属性)的列表;
  • Bb<-SuperB并且有一个SuperCccs属性)的列表;
  • Cc<-SuperC并且有一个foo属性。

然后,当我尝试如下查询时,我收到一条错误消息,指出它找不到footype 中的属性SuperCBb有一个抽象类型的列表,我不能改变它。所以,我不知道如何使查询工作。

select a from Aa a left outer join a.bbs b where b.ccs.foo = :foo

任何提示都会有所帮助。提前致谢。


编辑:

顺便说一句:例外:

org.hibernate.exception.SQLGrammarException: Unknown column 'cc3_1_.foo' in 'where clause'


编辑2:

如果我不使用 Hibernate,我会查找 JPA 文档,并找到一些可行的方法。


编辑3:

我将其更改为使用两个 SQL。首先,我根据foo属性找到 C 的 id,然后我只做与 id 比较的查询。

这里的问题是,每次我想要这个时我都必须执行 2 个 SQL……但是,至少它有效。

4

1 回答 1

2

您需要再加入一个抄送列表,然后就可以了:

select a from Aa a left outer join a.bbs b join b.ccs c where c.foo = :foo

由于 ccs 是一个列表,因此您不能以这种方式“取消引用”它的属性,如果可以的话,您不需要连接,您可以简单地编写:a.bbs.ccs.foo 但事实并非如此,因此您需要像我上面写的那样加入列表。

于 2012-10-09T17:39:56.303 回答