Java EclipseLink:对MappedSuperclass的查询失败
我的应用程序是一个商店出售鱼类,水族馆等,我想得到一个名单中的前10名的项目,所有项目的基础上销售计数。我使用以下类:Java EclipseLink:对MappedSuperclass的查询失败,java,jpa,eclipselink,Java,Jpa,Eclipselink,我的应用程序是一个商店出售鱼类,水族馆等,我想得到一个名单中的前10名的项目,所有项目的基础上销售计数。我使用以下类: @MappedSuperclass @NamedQueries({ @NamedQuery(name="getTopItems",query="SELECT x FROM FishStoreItem x ORDER BY x.salescnt DESC, x.title DESC") }) public abstract class FishStoreItem
@MappedSuperclass
@NamedQueries({
@NamedQuery(name="getTopItems",query="SELECT x FROM FishStoreItem x ORDER BY x.salescnt DESC, x.title DESC")
})
public abstract class FishStoreItem
extends DomainSuperClass implements Serializable {
......
}
问题出现在以下例外情况中:
异常[EclipseLink-8034](日食
持久性服务-
2.0.0.v20091127-r5931):org.eclipse.persistence.exceptions.jpqleexception
异常说明:编译时出错
查询[getTopItems:从中选择x
FishStoreItem x由x.salescnt订购
描述,x.标题描述]。未知实体
键入[FishStoreItem]
同样的代码在ApacheOpenJPA2.0.0上运行良好,但在EclipseLink版本2.1.0、2.0.1、1.0上运行失败
另外,我已经找到了Hibernate的解决方案,但我想确定EclipseLink也不可能做到这一点。映射的超类不是实体,不允许查询、持久化或与超类的关系(请参阅) 这在Apache OpenJPA 2.0用户指南中得到了确认: 映射的超类是非实体 类,该类可以定义持久状态 和实体的映射信息 子类。映射的超类是 通常是抽象的。不像真的 实体,则无法查询映射的实体 超类,传递映射的超类 任何
实体管理器的实例
或
查询方法,或声明持久
与映射超类的关系
目标。表示映射的超类
使用MappedSuperclass
标记
注释
注意
OpenJPA允许您查询映射的
超级类。对映射对象的查询
超类将返回所有匹配的
子类实例。OpenJPA也
允许您声明与的关系
映射超类类型;然而,你
无法跨这些关系进行查询
因此,虽然OpenJPA允许您进行查询,但这超出了JPA的范围。不要期望它能与任何JPA提供者一起工作。作为JPA实现,该代码也能很好地工作。能够查询映射超类的实例,同时又超出了JPA规范,这是一个非常合理的要求,我们相信可以提供这样的功能。毕竟持久性提供程序知道映射的超类中有哪些子类,所以不允许用户使用这样的工具是没有意义的。您能确认您只是想为每个实体子类运行一个单独的查询,并将结果聚合在一起吗 这类似于按类查询表 过去我为EclipseLink构建了一个扩展,可以处理此类查询,如果社区感兴趣,我们可以研究将其添加到项目中,并确定需求
道格情况仍然如此吗?我今天遇到了这个问题,使用的是datanucleus-accessplatform-full-deps-3.1.4版本。当尝试使用@MappedSuperclass类执行criteriaquery时,我得到了“类型不是已知的实体类型”。它确实得到了增强,但我无法查询基本映射的超类类型。我从openjpa转换过来,遇到了这个问题。在代码datanucleus代码库中是否有此方面的单元测试,我可以将其用作参考。我们对此类功能进行了单元测试。那时他工作。现在工作了。未来的工作