為濫用格式而道歉,我并不是真的在這里問一個問題,但我確實希望兩周前我開始用頭撞墻時會出現這種情況。
我繼承了幾個大型 Java 專案,使用 Spring 并在 Tomcat 上運行,并且正在升級它們使用的框架。但是,當我升級 Hibernate 時,我突然得到ExceptionInInitializer: root cause UnknownEntityException。我們的 HibernateConf 看起來像這樣:
public class HibernateUtil {
private static final SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
static {
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
}
我們仍然使用 hbm.xml 來描述映射,它們被放置在單獨的檔案中并包含在hibernate.cfg.xml中。
uj5u.com熱心網友回復:
現在我終于讓它再次作業了,這就是我所學到的: 顯然,引導背景關系無法找到 hibernate.cfg.xml,但靜默失敗。在 HibernateUtil 中,我可以使用 addResource 和 addAnnotatedClass,因為它們使用 Java 的類加載器,所以我需要在創建會話工廠之前列出每個 HBM 檔案和物體類。像這樣:
public class HibernateUtil {
private static final SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
static {
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
configuration.addResource("path/to/my/mapping.hbm.xml");
configuration.addAnnotatedClass(my.package.for.Persistence.class);
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
}
現在它可以作業了。原因是大多數檔案查找是相對于 TomCat 的作業目錄完成的,但少數使用 ClassLoader,因此可以更容易地在源代碼樹中找到資源檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493982.html
