Hibernate加载未在cfg中映射的实体

时间:2014-10-15 16:30:25

标签: java hibernate persistence

我已经使用Hibernate一段时间并取得了巨大的成功。但是我昨天遇到了一个问题,这里的答案将在未来节省大量的调试时间。

我忘了为我的hibernate.cfg添加一个hibernate映射以获取新的实体。

当我试图加载这个实体时,我本来期望得到某种运行时异常,但是它只是加载了什么并继续,好像一切都很好。

我使用以下代码加载实体。

protected List<T> findByCriteria(Session session, Criterion... criterion) {
    Criteria crit = session.createCriteria(getPersistentClass()); /getPersistentClass returns a Class<T>
    for (Criterion c : criterion) {
        crit.add(c);
    }
    return crit.list();
}

如果我尝试加载未在hibernate.cfg中映射的实体,我想要一个错误。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:0)

您是否在j2EE服务器中运行代码? 如前面的答案中所述,您是否在实体类上使用注释? 如果是这样,请尝试删除实体注释。

答案 1 :(得分:0)

最后,我放弃了hibernate.cfg中的映射,并在为SessionFactory构建Configuration对象时添加了以下方法。

!!

这将使用Entity注释查找项目中的所有类,并添加映射。

为简单起见,这使用了Reflections库。在这里找到:

private static void addAnnotatedEntityClasses(Configuration configuration) {
    Reflections reflections = new Reflections("com.mypackage");
    Set<Class<?>> classes = reflections.getTypesAnnotatedWith(Entity.class);

    logger.debug("Adding Hibernate Mapping for: ");
    for (final Class<?> clazz : classes) {
        logger.debug(clazz.getName());
        configuration.addAnnotatedClass(clazz);
    }
}