假设存在以下实体(未编写JPA注释):

class Questionnaire {
    ...
}

class Policy {
    private Questionnaire questionnaire;
    ...
}

class LifeQuestionnaire extends Questionnaire {
    private String someField;
}

class LifePolicy extends Policy {
    ...
}


看起来策略引用了问卷,但是LifePolicy引用了LifeQuestionnaire(此限制始终为true)。

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

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


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

最佳答案

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

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

09-03 19:24