jpa调用只读复合表但得到“异常描述:[CollectorInfo]缺少描述符”

时间:2011-03-06 20:00:27

标签: jpa composite descriptor

在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来自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定义然后它告诉我无法解析表(这是正确的,因为没有实际的表)。我尝试了各种各样的排列,似乎无法制作这种针线。

1 个答案:

答案 0 :(得分:2)

不确定你要做的是什么?

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

或者,不包括该类,本机SQL查询将是数据的Object [],您可以将自己的代码映射到您的类。

或者将其映射为实体,但要返回的数据除外。由于您将对象映射到查询结果,因此@Table将不相关。但这不应该导致任何错误,除非您是自动创建表或使用完整性检查程序。

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