Почему HQL вызывает исключение «класс не сопоставлен»? - PullRequest
1 голос
/ 13 мая 2011

У меня есть метод, который пытается использовать HQL для выполнения довольно сложного запроса в базе данных. Все мои классы сущностей отображаются с аннотациями и обнаруживаются во время компиляции, а не указаны в явном виде.

В следующем коде:

    List<Message> ms = ((Session) entityManager.getDelegate())
            .createCriteria(MessageCRI.class).list();
    log.info("Got " + ms.size() + " CRIs");

    List<Message> msgs = ((Session) entityManager.getDelegate())
            .createQuery(
                    "from MessageCRI c where c.rfdId in (select id from MessageRFD rfd where rfd.ssrId = :ssrId)")
            .setParameter("ssrId", ssrId).list();

Первый вызов успешен - я получаю сообщение в журнале, в котором говорится «Получил 2 CRI» или что-то подобное. Однако при следующем вызове произойдет сбой, и будет получена стекапакетная запись с коренной причиной «org.hibernate.hql.ast.QuerySyntaxException: MessageCRI не отображается»

Чего мне не хватать?

Ответы [ 2 ]

3 голосов
/ 13 мая 2011

Получает ли ваша @Entity аннотация name? (В этом случае используйте его имя).

Вне темы, но поскольку вы используете JPA EntityManager, почему бы вам не придерживаться синтаксиса JPQL ? А если вы используете JPA 2, вы даже можете использовать его типобезопасный Criteria API . Собственный синтаксис все еще может быть необходим для очень специфических ситуаций, но соблюдение стандартов, когда у вас есть возможность, всегда является хорошим выбором.

1 голос
/ 13 мая 2011

Сущность в HQL идентифицируется по имени сущности .По умолчанию он соответствует короткому имени своего класса, но его можно переопределить атрибутом name аннотации @Entity.Убедитесь, что вы не отменяете это.

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