[英]Hibernate loading Entities that are not mapped in cfg
我使用Hibernate已有一段時間,並取得了巨大的成功。 但是我昨天遇到了一個問題,這里的答案將在將來節省大量調試時間。
我忘記為我的hibernate.cfg添加新的實體的休眠映射。
當我嘗試加載該實體時,我本來希望得到某種運行時異常,但是相反,它什么也沒有加載,就好像一切都很好一樣繼續進行。
我正在使用以下代碼加載實體。
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中映射的實體,我想報錯。
有沒有辦法做到這一點?
您是否正在j2EE服務器中運行代碼。 如先前答案中所述,您是否在實體類上使用注釋? 如果是這樣,請嘗試刪除實體注釋。
最后,在為SessionFactory構建Configuration對象時,我放棄了hibernate.cfg中的映射,並添加了以下方法。
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);
}
}
這將找到項目中帶有Entity批注的所有類,並添加一個映射。
為了簡單起見,這使用了反射庫。 在這里找到:
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.9-RC1</version>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.