4

假设有以下实体(不写JPA注解):

class Questionnaire {
    ...
}

class Policy {
    private Questionnaire questionnaire;
    ...
}

class LifeQuestionnaire extends Questionnaire {
    private String someField;
}

class LifePolicy extends Policy {  
    ...
}

好吧,政策似乎引用了问卷,但 aLifePolicy引用了 a LifeQuestionnaire(这个限制总是正确的)。

有什么办法可以编写这样的查询:

from LifePolicy lplc
where ((LifeQuestionnaire) lplc.questionnaire).someField = :fieldValue

如您所见,我想在 HQL 查询中进行某种类型的转换,因为someField仅在LifeQuestionnaire.

4

2 回答 2

1

我遇到了完全相同的问题,并找到了适合我的解决方案。它不是很好,但它有效。尝试使用“交叉”连接。例如

select (specify what you want to fetch) 
from LifePolicy as lp, LifeQuestionnaire as lqn 
inner join lqn.questionnaire as q 
where lqn.id = lp.id 
and q.someField = :fielfValue

来源:

https://www.jumpingbean.co.za/blogs/mark/hibernate https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-from

于 2017-01-19T11:00:39.873 回答
0

如评论中所述:

即使该字段在子类中,您也可以在 HQL 查询中使用它,就像它在基类中一样。我测试了它并且它正在工作。

from LifePolicy lplc
where lplc.questionnaire.someFieldInSubclass = :fieldValue
于 2017-01-26T18:04:09.467 回答