Saya telah memperbaiki masalah yang sama dengan Hibernate 5. Ada masalah dalam kode ini
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
Kode ini berfungsi dengan baik untuk Hibernate 4.3.5, tetapi kode yang sama memiliki masalah yang sama untuk Hibernate 5.
Saat Anda melakukan configuration.buildSessionFactory(sr)
, menggunakan Hibernate 5, Configuration
kehilangan semua informasi tentang pemetaan yang didapat melalui panggilan configuration.configure()
.
Solusi
Untuk memperbaiki masalah ini, jika Anda menggunakan file konfigurasi standar hibernate.cfg.xml
dan hibernate.properties
, Anda dapat membuat pabrik sesi dengan cara ini (tanpa ServiceRegistry
)
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Memuat properti
Jika Anda memiliki properti dalam file selain hibernate.properties
, Anda dapat membangun pabrik sesi menggunakan StandardServiceRegistryBuilder
(bagaimanapun, jika Anda memiliki hibernate.properties
dan file lainnya, itu akan dimuat keduanya)
Untuk memuat properti sebagai sumber daya
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Anda harus memiliki hibernate-h2.properties
di jalur kelas (akar folder sumber, folder sumber daya). Anda juga dapat menentukan jalur dari folder sumber akar/com/github/xxx/model/hibernate-h2.properties
.
Untuk memuat properti dari jalur di sistem file
File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Anda dapat menemukan contoh aplikasi konsol menggunakan pendekatan ini di sini fluent-hibernate-mysql . Ini menggunakan kelas utilitas untuk membangun pabrik sesi dari library fluent-hibernate .
Tutorial Hibernate 5 salah
Ada contoh yang salah dalam tutorial Hibernate 5 1.1.6. Startup dan pembantu . Ini menggunakan kode ini
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
Itu tidak melakukan konfigurasi yang tepat.