我有一个名为Scoreable
的抽象类,它由名为Idea
和Solution
的两个类扩展。也就是说,两个子类都可以具有一组分数。每个Score
都有一个FK字段scoreable
。
我想要获得的是给出的分数集合,例如,一个想法。因此,我尝试了以下查询:
从Score的联接中选择s.scoreable的想法,其中idea.id = 16;
但是它返回Unable to find domain.Scoreable with id 16
,这可能是因为Scoreable表在数据库中不存在。我也尝试对此查询select s from Score s join TREAT(s.scoreable AS Idea) idea where idea.id = 16;
下调。在这种情况下,我会得到相同的响应。
最佳答案
您的问题可能是因为您用@MapedSuperclass映射了Scorable,现在您想在查询中包括基本类型。为此,您需要将基类改为实际的@Entity。
根据JPA文档:
映射超类是一个非实体类,可以为实体子类定义持久状态和映射信息。映射
超类通常是抽象的。与真实实体不同,您不能
查询映射的超类,将映射的超类实例传递给任何
EntityManager或Query方法,或声明与
映射的超类目标。您用表示映射的超类
MappedSuperclass标记注释。
因此,您可以将Scorable作为基类和@Entity,而其子句dn Solution也是@Entities。有关此继承模型的更多信息,请检查此JPA example from Oracle。
如果只需要Idea的分数,则可以发出以下查询:
select distinct s
from Idea i
join i.scores s
where i.id = ?
关于java - 我无法在JPQL/hibernate 模式下向下转换-无法找到domain.Scoreable ID为16,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25339817/