ホームページ >データベース >mysql チュートリアル >Hibernate 5 の「不明なエンティティ」エラー: エンティティ マッピング用に SessionFactory を適切に構成するにはどうすればよいですか?

Hibernate 5 の「不明なエンティティ」エラー: エンティティ マッピング用に SessionFactory を適切に構成するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-15 03:45:23445ブラウズ

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) を使用すると、呼び出しによって取得されたマッピング情報が設定で失われるために発生します。構成.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 ドキュメント (1.1.6 スタートアップとヘルパー) のサンプル チュートリアルでは、適切な構成を実行しない間違った例が提供されています。
  • 間違ったコードの使用「不明なエンティティ」エラーが発生する可能性があります。

以上がHibernate 5 の「不明なエンティティ」エラー: エンティティ マッピング用に SessionFactory を適切に構成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。