我已经使用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中映射的实体,我想要一个错误。
有办法做到这一点吗?
答案 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);
}
}