【问题标题】:jpa call readonly composite table but getting "Exception Description: Missing descriptor for [CollectorInfo]"jpa 调用只读复合表,但得到“异常描述:缺少 [CollectorInfo] 的描述符”
【发布时间】:2011-03-06 20:00:27
【问题描述】:

在 Spring 3 应用程序中,控制器调用 JpaCollectorManager 并调用 JpaCollectorInfoDao 以获取由 nativequery 定义的列表。该查询调用了 2 个使用 sql 和 jpql 的单独表,因为我需要使用 jpql 中未实现的 postgresql 功能。当控制器尝试归档列表时,我收到以下错误消息:

异常 [EclipseLink-6007] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.QueryException 异常说明:[CollectorInfo] 缺少描述符。
查询:ReadAllQuery(referenceClass=CollectorInfo sql="select distinct ON (col.collector_id,pst.process_source_type) col.*,pst.process_source_timestamp,pst.process_source_type from perform_schema.collector col join perform_schema.process_set pst on pst.collector_id = col. collector_id order by col.collector_id, pst.process_source_type,pst.process_source_timestamp desc ")

控制器 Java 有以下调用:

List<CollectorInfo> ps = this.collectorInfoManager.getLatestCollectorInfo();

JpaCollectorInfoManager.java 有这个:

public List<CollectorInfo> getLatestCollectorInfo()
{
  return collectorInfoDao.getLatestCollectorInfo();
}

JpaCollectorInfoDao.java:

  @Override
  @Transactional
  public List<CollectorInfo> getLatestCollectorInfo() {
    Query query = entityManager.createNativeQuery( ( "select     distinct ON ( col.collector_id," +
    "pst.process_source_type ) " + 
    "col.*," +
    "pst.process_source_timestamp," + 
    "pst.process_source_type " + 
    "from      perform_schema.collector col " +
    "join      perform_schema.process_set pst " +
     "on       pst.collector_id = col.collector_id " +
    "order by  col.collector_id, " +
    "pst.process_source_type," +
    "pst.process_source_timestamp desc " ),
     CollectorInfo.class );
    return ( (List<CollectorInfo>) query.getResultList() );
  }

CollectorInfo 类没有定义@Entity。如果我设置了 @Entity 定义,那么它告诉我无法解析表(这是正确的,因为没有实际的表)。我尝试了各种排列,似乎无法制作这条针线。

【问题讨论】:

    标签: jpa composite descriptor


    【解决方案1】:

    不确定你到底想做什么?

    您需要将类映射为实体,以便能够选择它的实例。

    或者,不要包含类,原生 SQL 查询将数据的 Object[],您可以在自己的代码中将其映射到您的类。

    或者将其映射为一个实体,您返回的数据除外。 @Table 将不相关,因为您将对象映射到查询结果。除非您自动创建表或使用完整性检查器,否则这不会导致任何错误。

    或者将对象正确映射到表格。然后根据需要使用提取连接或批量提取来优化您的检索。

    【讨论】:

    • 是否有任何文档可以完整地描述如何执行此操作。我尝试了很多其他来源的建议,但解决方案似乎从来没有融合在一起。如果你能指出我正确的方向,一个完整的工作示例会很有帮助。谢谢
    • 感谢您的帮助。我希望在某个地方有将所有内容放在一起的文档,但我使用了您的建议来完成工作。
    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多