我的应用程序是一家卖鱼、水族馆等的商店。我想根据销售数量得到所有商品中前10项的清单。我使用以下课程:
@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也是不可能的。
发布于 2010-07-05 09:14:36
映射的超类不是实体,不允许查询、持久化或与超类的关系(请参阅映射超类)。
ApacheApache2.0用户指南证实了这一点:
1.3。映射超类 映射超类是一个非实体类,它可以为实体子类定义持久状态和映射信息。映射的超类通常是抽象的。与真实实体不同,您不能查询映射的超类,不能将映射的超类实例传递给任何
EntityManager或查询方法,也不能声明与映射的超类目标的持久关系。使用MappedSuperclass标记注释表示映射的超类。 ..。 Note OpenJPA允许您查询映射的超类。映射超类上的查询将返回所有匹配的子类实例。OpenJPA还允许您将关系声明为映射的超类类型;但是,您不能跨这些关系进行查询。
因此,虽然OpenJPA允许查询,但这超出了JPA。不要期望它能与任何JPA提供程序一起工作。
发布于 2010-07-05 14:15:00
您能否确认您只想对每个实体子类和结果一起运行一个单独的查询?
这与TABLE_PER_CLASS查询类似。
我在过去已经为EclipseLink构建了一个扩展,它可以处理这样的查询,如果有社区感兴趣的话,我们可以将它添加到项目中,并且我们可以确定需求。
道格
发布于 2010-07-05 10:14:15
作为JPA实现,该代码也可以很好地与DataNucleus一起工作。能够查询映射的超类的实例,同时又超出了JPA规范,这是一个非常合理的要求,我们相信应该提供这样的东西。毕竟,持久性提供程序知道映射的超类中有哪些子类,所以不允许用户使用这样的工具是没有意义的。
https://stackoverflow.com/questions/3178187
复制相似问题