Hibernate5で同じ問題を修正しました。このコードに問題があります
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
このコードはHibernate4.3.5で正常に機能しますが、同じコードでもHibernate5でも同じ問題が発生します。
configuration.buildSessionFactory(sr)
を実行する場合 、Hibernate5を使用してConfiguration
configuration.configure()
の呼び出しによって取得されるマッピングに関するすべての情報が失われます 。
解決策
この問題を修正するには、標準の構成ファイルhibernate.cfg.xml
を使用する場合 およびhibernate.properties
、この方法でセッションファクトリを作成できます(ServiceRegistry
なし) )
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
プロパティの読み込み
hibernate.properties
以外のファイルにプロパティがある場合 、StandardServiceRegistryBuilder
を使用してセッションファクトリを構築できます (とにかく、hibernate.properties
がある場合 および他のファイル、両方がロードされます)
プロパティをリソースとして読み込むには
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
hibernate-h2.properties
が必要です クラスパス(sourcesフォルダーのルート、resourcesフォルダー)。ルートソースフォルダーからのパスも指定できます/com/github/xxx/model/hibernate-h2.properties
。
ファイルシステムのパスからプロパティをロードするには
File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
このアプローチを使用したコンソールアプリケーションの例は、fluent-hibernate-mysql> 。ユーティリティクラスを使用して、fluent-hibernateライブラリ からセッションファクトリを構築します。 。
不正なHibernate5チュートリアル
Hibernate5チュートリアルに誤った例があります
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
適切な構成を行いません。