Hibernate 5: Hibernate-MySQL 統合で「org.hibernate.MappingException: 不明なエンティティ」が発生しました
Hibernate 5.0 を MySQL と統合しようとしたとき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 では失敗します。
Configuration configuration = new Configuration(); configuration.configure(); ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings( configuration.getProperties()).build(); SessionFactory sf = configuration.buildSessionFactory(sr);
Hibernate 5 では、このメソッドにより、configuration.buildSessionFactory(sr) 中にエンティティ マッピングに関する情報が失われます。
解決策:
この問題には 2 つの解決策が考えられます。
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 中国語 Web サイトの他の関連記事を参照してください。