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) を使用すると、呼び出しによって取得されたマッピング情報が設定で失われるために発生します。構成.configure()。その結果、Hibernate は User クラスをアノテーション付きエンティティとして認識できません。
解決策
この問題を解決するには、次の 2 つのアプローチがあります。
標準設定ファイル (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 中国語 Web サイトの他の関連記事を参照してください。