在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定义然后它告诉我无法解析表(这是正确的,因为没有实际的表)。我尝试了各种各样的排列,似乎无法制作这种针线。
答案 0 :(得分:2)
不确定你要做的是什么?
您需要将该类映射为实体,以便能够选择它的实例。
或者,不包括该类,本机SQL查询将是数据的Object [],您可以将自己的代码映射到您的类。
或者将其映射为实体,但要返回的数据除外。由于您将对象映射到查询结果,因此@Table将不相关。但这不应该导致任何错误,除非您是自动创建表或使用完整性检查程序。
或者正确地将对象映射到表格。然后使用提取连接或批量提取来根据需要优化检索。