簡體   English   中英

未在cfg中映射的休眠加載實體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM