Hibernate 5: Menyelesaikan Ralat "Entiti Tidak Diketahui" Semasa Penyepaduan
Semasa cuba untuk mengintegrasikan Hibernate 5.0 dengan MySQL, banyak pembangun menghadapi mesej ralat "org.hibernate.MappingException: Entiti tidak diketahui." Isu ini timbul secara khusus dengan versi Hibernate 5.0.0 dan 5.0.1, manakala versi sebelumnya seperti 4.3.9 berfungsi dengan betul.
Definisi Masalah
Entiti "Tidak diketahui " ralat berlaku apabila Hibernate tidak dapat mengenali kelas yang dianotasi sebagai entiti. Ini boleh berlaku jika metadata pemetaan untuk kelas tidak dikonfigurasikan dengan betul atau ditambahkan pada konfigurasi Hibernate.
Butiran Konfigurasi
Kebergantungan Maven dan hibernate.cfg yang disediakan. konfigurasi xml nampaknya betul. Kelas Pengguna juga diberi anotasi sebagai entiti dan telah dipetakan ke jadual pangkalan data "User_table."
Punca dan Penyelesaian
Punca isu ini terletak pada proses mencipta SessionFactory dalam kelas HibernateMain. Dalam Hibernate 5, kod berikut digunakan untuk mengkonfigurasi dan membina SessionFactory:
Configuration configuration = new Configuration(); configuration.configure(); ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings( configuration.getProperties()).build(); SessionFactory sf = configuration.buildSessionFactory(sr);
Masalah timbul kerana menggunakan configuration.buildSessionFactory(sr) dalam Hibernate 5 menyebabkan konfigurasi kehilangan maklumat pemetaan yang diperoleh dengan memanggil configuration.configure(). Akibatnya, Hibernate tidak dapat mengenali kelas Pengguna sebagai entiti beranotasi.
Penyelesaian
Untuk menyelesaikan isu ini, terdapat dua pendekatan:
Menggunakan Fail Konfigurasi Standard (hibernate.cfg.xml dan hibernate.properties)
Jika anda menggunakan fail konfigurasi standard, anda boleh mencipta SessionFactory tanpa menggunakan ServiceRegistry.
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Memuatkan Sifat
Jika anda mempunyai sifat dalam fail berasingan, anda boleh memuatkannya dan membina SessionFactory menggunakan StandardServiceRegistryBuilder.
Memuatkan Sifat sebagai Sumber
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder(). configure().loadProperties("hibernate-h2.properties").build(); SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Memuatkan Sifat dari Laluan
File propertiesPath = new File("some_path"); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder(). configure().loadProperties(propertiesPath).build(); SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Tambahan Nota
Atas ialah kandungan terperinci Ralat 'Entiti Tidak Diketahui' Hibernate 5: Cara Mengkonfigurasi SessionFactory dengan Betul untuk Pemetaan Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!