繁体   English   中英

我升级到 Hibernate 6.0,现在出现未知实体错误

[英]I upgraded to Hibernate 6.0 and now I get Unknown Entity errors

为滥用格式而道歉,我并不是真的在这里问一个问题,但我确实希望两周前我开始用头撞墙时会出现这种情况。

我继承了几个大型 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中。

现在我终于让它再次工作了,这就是我所学到的: 显然,引导上下文无法找到 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 并且因此可以更容易地在源代码树中找到资源文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM