2011-12-24 6 views
205

जब मैं 4.0.0.final को मैं इस लाइन में पदावनत विधि buildSessionFactory() बारे में एक चेतावनी मिल गया 3.6.8.final से हाइबरनेट के संस्करण अद्यतन:बिल्डसेशन फैक्टरी() हाइबरनेट 4 में बहिष्कृत है?

private static final SessionFactory sessionFactory = 
     new Configuration().configure().buildSessionFactory(); 

जावाडोक किसी अन्य विधि के उपयोग की सिफारिश

buildSessionFactory(ServiceRegistry serviceRegistry)

लेकिन documentation में मैं पदावनत संस्करण :(

तुम मुझे इस छोटे से गलतफहमी के साथ मदद कर सकते हैं पाया?

+0

4.3.8 त्वरित प्रारंभ मार्गदर्शिका में भी वे इस उदाहरण का उपयोग कर रहे हैं: नया कॉन्फ़िगरेशन() .configure()। BuildSessionFactory(); :( –

+0

@ वेनकाटाराजू हो सकता है, यह बुरा नहीं है, क्योंकि हाइबरनेट में 5 सबकुछ वापस आ गया है और यह उदाहरण सही है, लेकिन (!) यहां सभी कॉन्फ़िगरेशन उदाहरण हैं [हाइबरनेट 5 के लिए मान्य नहीं हैं] (http://stackoverflow.com/ए/32711654/3405171) –

उत्तर

364

हाँ, यह मान्य नहीं है। निम्नलिखित के साथ अपने SessionFactory बदलें:

में हाइबरनेट 4.0, 4.1, 4।2

private static SessionFactory sessionFactory; 
private static ServiceRegistry serviceRegistry; 

public static SessionFactory createSessionFactory() { 
    Configuration configuration = new Configuration(); 
    configuration.configure(); 
    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(
      configuration.getProperties()). buildServiceRegistry(); 
    sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
    return sessionFactory; 
} 

UPDATE:

में हाइबरनेट 4.3 ServiceRegistryBuilder पदावनत है। इसके बजाए निम्नलिखित का प्रयोग करें।

serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
      configuration.getProperties()).build(); 
+3

यह मेरे लिए भी काम करता है! धन्यवाद! –

+6

org.hibernate.service.ServiceRegistryBuilder भी बहिष्कृत है! – Accollativo

+11

हां, ऐसा लगता है कि सेवा रजिस्ट्री बिल्डर खुद को हटा दिया गया है, दस्तावेज़ीकरण को देखते हुए, वे इसके बजाय मानक सेवा सेवा रजिस्ट्री का उपयोग करने का सुझाव देते हैं। तो मुझे लगता है कि कॉल अब नया मानक रजिस्ट्रीबिल्डर() होना चाहिए। आवेदन सेटिंग्स (config.getProperties())। Build(); –

4

यह इस रूप में सरल है: JBoss डॉक्स% पूरी तरह से अच्छी तरह से बनाए नहीं 100 है। what the JavaDoc says के साथ जाएं: buildSessionFactory(ServiceRegistry serviceRegistry)

15

हाँ, यह मान्य नहीं है। http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory() विशेष रूप से आपको इसके द्वारा प्राप्त की गई अन्य विधि का उपयोग करने के लिए कहता है (buildSessionFactory(ServiceRegistry serviceRegistry)) - इसलिए इसका उपयोग करें।

प्रलेखन रिलीज करने के लिए रिलीज से कॉपी किया है, और संभावना बस अभी तक (वे हर रिलीज के साथ मैनुअल पुनर्लेखन नहीं है) अद्यतन नहीं किया गया है - तो Javadocs पर भरोसा है।

इस परिवर्तन की बारीकियों पर देखी जा सकती है:

कुछ अतिरिक्त संदर्भ:

+0

तो हम अब सत्र कैसे बना सकते हैं? सेवा रजिस्ट्री इंटरफ़ेस को असाइन किया गया ऑब्जेक्ट क्या है ?? –

+0

@IsmailMarmoush - मैंने अभी तक इसके साथ बहुत कुछ नहीं खेला है, लेकिन कुछ अतिरिक्त संदर्भ जोड़े हैं – ziesemer

4

यह प्रलेखन के विभिन्न संस्करणों के बीच फ़र्क को खोजने के लिए असामान्य नहीं है। अधिकांश डेवलपर्स दस्तावेज को एक कोर के रूप में देखते हैं, और वे इसे बंद कर देते हैं।

अंगूठे के नियम के रूप में, यदि जावाडोक एक बात कहता है और कुछ गैर-जावाडोक दस्तावेज इसके विपरीत हैं, तो संभावना है कि जावडोक अधिक सटीक है। प्रोग्रामर कोड में बदलाव के साथ जावाडोक को अद्यतित रखने की अधिक संभावना रखते हैं ... क्योंकि जावाडोक के लिए "स्रोत" कोड के समान फ़ाइल में है।

@deprecated टैग के मामले में, यह एक आभासी यक़ीन है कि जावाडोक और अधिक सटीक है। डेवलपर्स सावधानीपूर्वक विचार करने के बाद चीजों को हटा देते हैं ... और (आमतौर पर बोलते हुए) वे उन्हें कम नहीं करते हैं।

+1

* ... और वे उन्हें कम नहीं करते हैं। * ... जब तक इसे 'System.getenv (स्ट्रिंग)' नहीं कहा जाता है, http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4199068 – bestsss

+1

यह है बकवास परियोजनाओं को खोजने के लिए असामान्य नहीं है, जिनके आलसी डेवलपर्स कोड के साथ गठबंधन दस्तावेज को रखने के बारे में परेशान नहीं हैं, ताकि वे अपने उपयोगकर्ताओं को पागल कर सकें, जबकि ये पता लगाने की कोशिश करें कि कैसे खूनी बकवास खुद को rummaging द्वारा काम करता है और उम्मीद है कि वहाँ है किसी चीज़ जी से अधिक ** ** TODO: टिप्पणी-मुझे * /: - \ – zakmck

+0

@bestsss ... या इसे 'Configuration.buildSessionFactory() 'कहा जाता है;) –

6

या

public class Hbutil { 

    private static SessionFactory sessionFactory; 
    private static ServiceRegistry serviceRegistry; 

    private static SessionFactory configureSessionFactory() throws HibernateException { 
     Configuration configuration = new Configuration(); 
     configuration.configure(); 
     serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();   
     sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
     return sessionFactory; 
    } 

    public static SessionFactory getSessionFactory() { 
     return configureSessionFactory(); 

    } 
} 
+0

इस कोड में कुछ बहिष्कृत विधियों का उपयोग किया जा रहा है। –

3

कोड हाइबरनेट 4.3.0 में काम करने के लिए सत्यापित। ध्यान दें कि आप एक्सएमएल फ़ाइल नाम पैरामीटर को हटा सकते हैं, या फिर अपना रास्ता वहां उपलब्ध करा सकते हैं। यह अन्य पदों के समान है (लेकिन टाइपो सही), लेकिन यह एक सही है।

import org.hibernate.SessionFactory; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry;  


Configuration configuration = new Configuration(); 
configuration.configure("/com/rtw/test/hiber/hibernate.cfg.xml"); 
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();   
    sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
1
public class HibernateSessionFactory { 

private static final SessionFactory sessionFactory = buildSessionFactory1(); 

private static SessionFactory buildSessionFactory1() { 
Configuration configuration = new Configuration().configure(); // configuration 
                   // settings 
                   // from 
                   // hibernate.cfg.xml 

StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder(); 


serviceRegistryBuilder.applySettings(configuration.getProperties()); 

ServiceRegistry serviceRegistry = serviceRegistryBuilder.build(); 

return configuration.buildSessionFactory(serviceRegistry); 
} 

public static SessionFactory getSessionFactory() { 
return sessionFactory; 
} 

public static void shutdown() { 
// Close caches and connection pools 
getSessionFactory().close(); 
} 
+0

'मानक सेवा रजिस्ट्री बिल्डर' को भी बहिष्कृत किया गया है। – NixRam

+0

@NitinRam 'StandardServiceRegistryBuilder' को बहिष्कृत नहीं किया गया है। – JPG

+0

हाइबरनेट में बहिष्कार को चालू और बंद करने के बारे में बहुत अजीब बात है। यह एक बिंदु पर होता था। http://stackoverflow.com/questions/17911308/looking-for-a-not-deprecated- सत्र- फैक्टरी – NixRam

0

सार्वजनिक शून्य sampleConnection() अपवाद {

 Configuration cfg = new Configuration().addResource("hibernate.cfg.xml").configure(); 
    StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); 
    SessionFactory sessionFactory = configuration.buildSessionFactory(ssrb.build()); 
    Session session = sessionFactory.openSession(); 
    logger.debug(" connection with the database created successfuly."); 
} 
0

फेंकता मैं संपादित विधि batbaatar above द्वारा बनाई तो यह एक पैरामीटर के रूप विन्यास वस्तु स्वीकार करता है:

public static SessionFactory createSessionFactory(Configuration configuration) { 
     serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
       configuration.getProperties()).build(); 
     factory = configuration.buildSessionFactory(serviceRegistry); 
     return factory; 
    } 

में मुख्य वर्ग मैंने किया:

private static SessionFactory factory; 
    private static Configuration configuration 
    ...  
    configuration = new Configuration(); 
    configuration.configure().addAnnotatedClass(Employee.class); 
    // Other configurations, then   
    factory = createSessionFactory(configuration); 
-2

बस आयात निम्न पैकेज,

import org.hibernate.cfg.Configuration; 
0

हाइबरनेट 4.2.2 में

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.service.ServiceRegistryBuilder; 

public class Test { 
    public static void main(String[] args) throws Exception 
{ 
    Configuration configuration = new Configuration() 
      .configure(); 

    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(
      configuration.getProperties()).buildServiceRegistry(); 

    SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); 

    Session session = sessionFactory.openSession(); 

    Transaction transaction = session.beginTransaction(); 

    Users users = new Users(); 

    ... ... 

    session.save(users); 

    transaction.commit(); 

    session.close(); 

    sessionFactory.close(); 

    } 
} 
0
Tested on 4.2.7 release 

package com.national.software.hibernate; 

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.service.ServiceRegistryBuilder; 

import com.national.software.dto.UserDetails; 

public class HibernateTest { 

    static SessionFactory sessionFactory; 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     UserDetails user = new UserDetails(); 
     user.setUserId(1); 
     user.setUserName("user1"); 

     Configuration config = new Configuration(); 
     config.configure(); 

     ServiceRegistry serviceRegistry = (ServiceRegistry) new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); 
     sessionFactory = config.buildSessionFactory(serviceRegistry); 

     Session session = sessionFactory.openSession(); 
     session.beginTransaction(); 
     session.save(user); 
     session.getTransaction().commit(); 

    } 

} 
0

यहाँ कई एपीआई हाइबरनेट कोर ढांचे में पदावनत कर रहे हैं। ।

हम नीचे के रूप में सत्र का कारखाना बनाया है:

SessionFactory sessionFactory = नया विन्यास() कॉन्फ़िगर() buildSessionFactory();।

विधि निर्माण सत्र फ़ैक्टरी को हाइबरनेट 4 रिलीज से हटा दिया गया है और इसे नए एपीआई के साथ बदल दिया गया है।)

  1. विन्यास विन्यास = नया विन्यास() कॉन्फ़िगर (;: आप हाइबरनेट 4.3.0 और बाद के संस्करण का उपयोग कर रहे हैं, तो आपके कोड हो गया है।

  2. मानक सेवा रजिस्ट्री बिल्डर बिल्डर = नया मानक सेवा रजिस्ट्रीबिल्डर()। आवेदन सेटिंग्स (config.getProperties());

  3. सत्र कारखाना कारखाना = config.buildSessionFactory (builder.build());

कक्षा सेवा रजिस्ट्री बिल्डर को मानक सेवा सेवा रजिस्ट्रीबिल्डर द्वारा 4.3.0 से प्रतिस्थापित किया गया है। ऐसा लगता है कि 5.0 रिलीज में बहुत सारे बदलाव आएंगे। फिर भी बहिष्कृत एपीआई और उपयोग करने के उपयुक्त विकल्पों पर ज्यादा स्पष्टता नहीं है।प्रत्येक वृद्धिशील रिलीज अधिक बहिष्कृत एपीआई के साथ आता है, वे रिलीज 5.0 के लिए कोर फ्रेमवर्क ठीक ट्यूनिंग के रास्ते में हैं।

Configuration configuration = new Configuration().configure(); 
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder(). 
applySettings(configuration.getProperties()); 
SessionFactory factory = configuration.buildSessionFactory(builder.build()); 
3

नवीनतम हाइबरनेट रिलीज में SessionFactory वस्तु 4.3.0 आगे बनाने के लिए एक बेहतर तरीका इस प्रकार है:

private static StandardServiceRegistry registry; 
    private static SessionFactory sessionFactory; 

    public static SessionFactory getSessionFactory() { 
    if (sessionFactory == null) { 
     try { 
     // Creating a registry 
     registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build(); 

     // Create the MetadataSources 
     MetadataSources sources = new MetadataSources(registry); 

     // Create the Metadata 
     Metadata metadata = sources.getMetadataBuilder().build(); 

     // Create SessionFactory 
     sessionFactory = metadata.getSessionFactoryBuilder().build(); 

     } catch (Exception e) { 
     e.printStackTrace(); 
     if (registry != null) { 
      StandardServiceRegistryBuilder.destroy(registry); 
     } 
     } 
    } 
    return sessionFactory; 
    } 

    //To shut down 
public static void shutdown() { 
    if (registry != null) { 
     StandardServiceRegistryBuilder.destroy(registry); 
    } 
    } 
+0

त्रुटि प्राप्त करना: प्रकार कॉन्फ़िगरेशन में विधि निर्माण सत्र फ़ैक्टरी() तर्क के लिए लागू नहीं है (मानक सेवा रजिस्ट्री) – Anju

2

आप हाइबरनेट 5.2 और फिर ऊपर आप इस का उपयोग कर सकते उपयोग कर रहे हैं:

संबंधित मुद्दे