为什么HQL导致“类未映射”异常?

时间:2011-05-13 17:20:50

标签: hibernate hql

我有一种方法试图使用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”或某些内容。然而,下一次调用失败,产生一个stackdump,其根本原因是“org.hibernate.hql.ast.QuerySyntaxException:MessageCRI未映射”

我能错过什么?

2 个答案:

答案 0 :(得分:3)

您的@Entity注释是否收到name? (在这种情况下,请使用它的名称)。

超出主题但由于您使用的是JPA EntityManager,为什么不坚持使用JPQL syntax?如果您使用的是JPA 2,您甚至可以利用它的类型安全Criteria API。对于非常特定的情况,可能仍然需要本机语法,但是当您拥有该选项时遵循标准始终是一个不错的选择。

答案 1 :(得分:1)

HQL中的实体由其实体名称标识。默认情况下,它与其类的短名称匹配,但可以通过name注释的@Entity属性覆盖。确保不要覆盖它。