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'未知实体”错误:如何正确配置 SessionFactory 进行实体映射?的详细内容。更多信息请关注PHP中文网其他相关文章!