首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EclipseLink:对MappedSuperclass的查询失败

EclipseLink:对MappedSuperclass的查询失败
EN

Stack Overflow用户
提问于 2010-07-05 08:54:13
回答 3查看 5.2K关注 0票数 3

我的应用程序是一家卖鱼、水族馆等的商店。我想根据销售数量得到所有商品中前10项的清单。我使用以下课程:

代码语言:javascript
复制
@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 {
......
}

问题出现在以下例外情况:

异常org.eclipse.persistence.exceptions.JPQLException EclipseLink-8034:错误编译查询getTopItems:从FishStoreItem x ORDER中选择x由x.salescnt DESC,x.title DESC。未知实体类型FishStoreItem。

相同的代码在ApacheVer2.0.0中运行良好,但EclipseLink ver2.1.0、2.0.1、1.0却失败。

我已经为Hibernate找到了解决方案,但是我想确定EclipseLink也是不可能的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-05 09:14:36

映射的超类不是实体,不允许查询、持久化或与超类的关系(请参阅映射超类)。

ApacheApache2.0用户指南证实了这一点:

1.3。映射超类 映射超类是一个非实体类,它可以为实体子类定义持久状态和映射信息。映射的超类通常是抽象的。与真实实体不同,您不能查询映射的超类,不能将映射的超类实例传递给任何EntityManager或查询方法,也不能声明与映射的超类目标的持久关系。使用MappedSuperclass标记注释表示映射的超类。 ..。 Note OpenJPA允许您查询映射的超类。映射超类上的查询将返回所有匹配的子类实例。OpenJPA还允许您将关系声明为映射的超类类型;但是,您不能跨这些关系进行查询。

因此,虽然OpenJPA允许查询,但这超出了JPA。不要期望它能与任何JPA提供程序一起工作。

票数 6
EN

Stack Overflow用户

发布于 2010-07-05 14:15:00

您能否确认您只想对每个实体子类和结果一起运行一个单独的查询?

这与TABLE_PER_CLASS查询类似。

我在过去已经为EclipseLink构建了一个扩展,它可以处理这样的查询,如果有社区感兴趣的话,我们可以将它添加到项目中,并且我们可以确定需求。

道格

票数 2
EN

Stack Overflow用户

发布于 2010-07-05 10:14:15

作为JPA实现,该代码也可以很好地与DataNucleus一起工作。能够查询映射的超类的实例,同时又超出了JPA规范,这是一个非常合理的要求,我们相信应该提供这样的东西。毕竟,持久性提供程序知道映射的超类中有哪些子类,所以不允许用户使用这样的工具是没有意义的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3178187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档