Hibernate 5:在 Hibernate-MySQL 集成中遇到“org.hibernate.MappingException:未知实体”
尝试将 Hibernate 5.0 与使用 MySQL 数据库时,用户可能会遇到错误消息“org.hibernate.MappingException:未知实体”。此问题主要影响 Hibernate 版本 5.0.0 和 5.0.1,而早期版本(例如 4.3.9)可以正常运行。
要解决此问题,必须了解 Hibernate 5 中引入的更改。在版本 4 中更早之前,Hibernate 严重依赖 StandardServiceRegistryBuilder。然而,在 Hibernate 5 中,配置 процессе 已被更改。
不正确的配置实践:
以下代码,在 Hibernate 4.3.5 中可以工作,但在 Hibernate 中失败5、举例说明错误的配置方法:
Configuration configuration = new Configuration(); configuration.configure(); ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings( configuration.getProperties()).build(); SessionFactory sf = configuration.buildSessionFactory(sr);
在Hibernate 5中,此方法会导致在configuration.buildSessionFactory(sr)期间丢失有关实体映射的信息。
解决方案:
此问题有两种可能的解决方案:
1.标准配置文件(hibernate.cfg.xml 和 hibernate.properties):
对于标准配置文件,使用这种简单的方法来创建会话工厂:
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
2.从外部源加载属性:
如果您将属性存储在 hibernate.properties 以外的位置,请按照以下步骤操作:
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 与 MySQL 集成并解决“未知实体”错误。
以上是为什么我在 Hibernate 5.0 与 MySQL 集成中收到“org.hibernate.MappingException:未知实体”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!