jpa вызывает составную таблицу только для чтения, но получает «Описание исключения: отсутствует дескриптор для [CollectorInfo]» - PullRequest
2 голосов
/ 06 марта 2011

В приложении Spring 3 контроллер вызывает JpaCollectorManager с вызовами JpaCollectorInfoDao для получения списка, который определяется встроенным запросом.Запрос вызывает 2 отдельные таблицы, которые используют sql и jpql, потому что мне нужно использовать функцию postgresql, не реализованную в jpql.Когда контроллер пытается подать список, я получаю следующее сообщение об ошибке:

Исключение [EclipseLink-6007] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.QueryException Исключение Описание: отсутствует дескриптор для [CollectorInfo].
Запрос: ReadAllQuery (referenceClass = CollectorInfo sql = "выбрать различное ON (col.collector_id, pst.process_source_type) col. *, pst.process_source_timestamp, pst.type из from.pst.typeexecute_schema.collector col join join execute_schema.process_set pst для pst.collector_id = col.collector_id упорядоченный по 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 Ответ

2 голосов
/ 07 марта 2011

Не уверены, что именно вы пытаетесь сделать?

Вам необходимо отобразить класс как сущность, чтобы иметь возможность выбирать его экземпляры.

Либо не включайте класс, нативный SQL-запрос будет объектом [] данных, который вы можете сопоставить в своем собственном коде с вашим классом.

Или сопоставьте его как сущность, исключая данные, которые вы возвращаете. @Table не будет релевантным, поскольку вы сопоставляете объект с результатами запроса. Это не должно вызывать никаких ошибок, за исключением случаев, когда вы автоматически создаете таблицу или используете средство проверки целостности.

Или правильно сопоставьте объекты с таблицей. Затем используйте выборочное соединение или пакетную выборку для оптимизации поиска, если это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...