मैंने हाइबरनेट 5 के साथ भी यही समस्या ठीक की है। इस कोड में एक समस्या है
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
यह कोड हाइबरनेट 4.3.5 के लिए ठीक काम करता है, लेकिन उसी कोड में हाइबरनेट 5 के लिए एक ही समस्या है।
जब आप configuration.buildSessionFactory(sr)
करते हैं , हाइबरनेट 5 का उपयोग करते हुए, 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
होना चाहिए कक्षा पथ में (स्रोत फ़ोल्डर की जड़, संसाधन फ़ोल्डर)। आप रूट स्रोत फ़ोल्डर से भी पथ निर्दिष्ट कर सकते हैं/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 लाइब्रेरी से सत्र फ़ैक्टरी बनाने के लिए उपयोगिता वर्ग का उपयोग करता है .
गलत हाइबरनेट 5 ट्यूटोरियल
हाइबरनेट 5 ट्यूटोरियल में एक गलत उदाहरण है 1.1.6। स्टार्टअप और सहायक . यह इस कोड का उपयोग करता है
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
यह उचित कॉन्फ़िगरेशन नहीं करता है।