首页 >数据库 >mysql教程 >Hibernate 5'未知实体”错误:如何正确配置 SessionFactory 进行实体映射?

Hibernate 5'未知实体”错误:如何正确配置 SessionFactory 进行实体映射?

Linda Hamilton
Linda Hamilton原创
2024-12-15 03:45:23440浏览

Hibernate 5

Hibernate 5:解决集成过程中的“未知实体”错误

在尝试将 Hibernate 5.0 与 MySQL 集成时,许多开发人员遇到错误消息“org.hibernate.MappingException:未知实体。”此问题特别出现在 Hibernate 版本 5.0.0 和 5.0.1 中,而以前的版本(例如 4.3.9)可以正常运行。

问题定义

“未知实体”当 Hibernate 无法识别注释为实体的类时,会发生错误。如果类的映射元数据未正确配置或添加到 Hibernate 配置中,则可能会发生这种情况。

配置详细信息

提供的 Maven 依赖项和 hibernate.cfg。 xml配置看起来是正确的。 User 类也被注释为实体,并已映射到数据库表“User_table”。

原因及解决方案

这个问题的根本原因在于HibernateMain类中创建SessionFactory的过程。在Hibernate 5中,使用以下代码来配置和构建SessionFactory:

Configuration configuration = new Configuration();
configuration.configure();

ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
    configuration.getProperties()).build();

SessionFactory sf = configuration.buildSessionFactory(sr);

问题的出现是因为在Hibernate 5中使用configuration.buildSessionFactory(sr)会导致配置丢失通过调用获得的映射信息配置.config()。因此,Hibernate 无法将 User 类识别为带注释的实体。

解决方案

要解决此问题,有两种方法:

使用标准配置文件(hibernate.cfg.xml 和hibernate.properties)

如果您使用标准配置文件,则可以在不使用 ServiceRegistry 的情况下创建 SessionFactory。

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

加载属性

如果您在单独的文件中拥有属性,则可以加载它们并使用以下命令构建 SessionFactory StandardServiceRegistryBuilder。

将属性作为资源加载

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
    configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);

从路径加载属性

File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
    configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);

附加注释

  • Hibernate 5 文档中的示例教程(1.1.6 启动和帮助程序)提供了一个不正确的示例,无法执行正确的配置。
  • 使用不正确的代码可能会导致“未知实体”错误。

以上是Hibernate 5'未知实体”错误:如何正确配置 SessionFactory 进行实体映射?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn