2011-12-19 12 views
42

यह काम कर रहा था:स्प्रिंग 3.1, हाइबरनेट 4, SessionFactory

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
... 

लेकिन ऊपर उल्लिखित संस्करण के लिए उन्नयन यह टूट जाता है। SessionFactory बीन वसंत 3.1 के साथ बीन बनाने के लिए सही विधि क्या है। कृपया और हाइबरनेट 4.0.0.FINAL?

त्रुटि तैनाती पर है:

nested exception is java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider;


संपादित
अपने ही जवाब है, जो यह मेरे लिए तय जोड़ लिया है।

+0

वास्तव में यह पदावनत किया गया था है चाहिए। तो हटा देना बहुत संदिग्ध है http://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/cache/CacheProvider.html –

उत्तर

91

मुझे लगता है कि आप LocalSessionFactoryBean जावाडोक से org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

के बजाय org.springframework.orm.hibernate4.LocalSessionFactoryBean उपयोग करना चाहिए:

NOTE: This variant of LocalSessionFactoryBean requires Hibernate 4.0 or higher. It is similar in role to the same-named class in the orm.hibernate3 package. However, in practice, it is closer to AnnotationSessionFactoryBean since its core purpose is to bootstrap a SessionFactory from annotation scanning.

+1

मैं केवल orm.hibernate4 नहीं देख सकता .hibernate3 क्या आप कोई भी दे सकते हैं अंतर्दृष्टि यहाँ? मैंने हाइबरनेट 4 आयात किया है ... हल: सुनिश्चित करें कि आप वसंत 3.2.4 का भी उपयोग करते हैं। 3.0.5 बहुत पुराना है। –

+1

मैं अभी इस उदाहरण में आया हूं, मुझे आशा है कि इससे किसी को भी मदद मिलेगी http://www.baeldung.com/hibernate-4-spring –

15

हाइबरनेट 4 ने CacheProvider- पहले जारी किए गए RegionFactory-संबंधित कैश इंटरफ़ेस के पक्ष में संबंधित इंटरफेस और कक्षाओं को हटा दिया है। आप संस्करण 4 कैश पैकेज सारांश here, संस्करण 3.2 कैश पैकेज सारांश here (RegionFactory इंटरफ़ेस जोड़ा गया था) और संस्करण 3.3 कैश पैकेज सारांश here (जब RegionFactory पहले रिलीज़ किया गया था) मिल सकता है। करता

हालांकि, स्प्रिंग 3.1 dependencies स्प्रिंग 3.1 पर आधारित नहीं:

JavaDoc के अलावा, आप निम्नलिखित प्रलेखन उपयोगी लग सकते हाइबरनेट 4 की आवश्यकता है (Full Dependencies सेक्शन के तहत, JBoss Hibernate Object-Relational Mapper संस्करण 3.3.2.GA पर है)। यदि आप हाइबरनेट 4 में अपग्रेड करना चाहते हैं, तो आपको अपनी कैश सेटिंग्स को अपडेट करना होगा। अन्यथा, इसके बजाय हाइबरनेट 3.3.2 या उच्चतर 3.X संस्करण का उपयोग करने का प्रयास करें।

अद्यतन: ध्यान रखें, स्प्रिंग 3.1 में 4 दस्तावेज हाइबरनेट 4 वर्तमान में स्पैस है। Spring Framework Reference Documentation केवल Support for Hibernate 4.x के लिए निम्नलिखित है:

See Javadoc for classes within the new org.springframework.orm.hibernate4 package 

स्प्रिंग 3.1 LocalSessionFactoryBuilder, जो हाइबरनेट के Configuration फैली परिचय देता है।

यह कुछ other changes पर नज़र रखना चाहिए आप लग रहे हैं आप हाइबरनेट 4.

अद्यतन 2 उपयोग करना चाहते हैं हैं: बस देखा इस सवाल Exception NoClassDefFoundError for CacheProvider के एक करीबी डुप्लिकेट है।

5

मैं चीजों के एक जोड़े बदलना पड़ा, ये हम चले:

मेरे लेनदेन प्रबंधक में सेट अप 3 -> 4:

org.springframework.orm.hibernate4.HibernateTransactionManager; 

और यह (धन्यवाद @toxin) करने के लिए अपने sessionFactory:

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" 
+0

मैंने वही सर किया और org.springframework.beans.NotWritablePropertyException: अवैध बीन क्लास की संपत्ति 'एक्सपोज़ ट्रांज़ेक्शनएवेयर सत्र फ़ैक्टरी' ... – masT

-3

स्प्रिंग 3.1 और हाइबरनेट 4 कई मायनों में संगत नहीं हैं। कृपया निम्नलिखित वसंत JIRA https://jira.springsource.org/browse/SPR-9365

+2

रिपोर्ट के बारे में है, स्प्रिंग 3.x और हाइबरनेट 4 संगत नहीं हैं। HibernateTemplate का उपयोग करने में असमर्थ। ऐसा इसलिए है क्योंकि HibernateTemplate अब हाइबरनेट 4 द्वारा समर्थित नहीं है। – Hemeroc

8

उपयोग इस विन्यास का उल्लेख

हाइबरनेट विन्यास फाइल:

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

पोम:

<!-- CGLIB --> 
    <dependency> 
     <groupId>cglib</groupId> 
     <artifactId>cglib</artifactId> 
     <version>${cglib-version}</version> 
     <scope>runtime</scope> 
    </dependency> 

    <!-- Hibernate --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${org.hibernate-version}</version> 
     <!-- will come with Hibernate core --> 
    </dependency> 

    <!-- Spring --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${org.springframework-version}</version> 
    </dependency> 

मैं संस्करणों शामिल करना भूल जाते हैं, मैं हाइबरनेट संस्करण का उपयोग कर रहा : 4.1.2. अंतिम और वसंत संस्करण: 3.1.1.RELEASE, हाइबरनेट 4.1.3 का एक अद्यतन है। अंतिम, परीक्षण नहीं किया गया लेकिन मुझे विश्वास है कि यह ठीक काम करेगा।

0
  • हाइबरनेट 4.0 या उच्चतर के मामले में, वसंत 4.0 के रूप में, आप
org.springframework.orm.hibernate4.LocalSessionFactoryBean 

उदाहरण के लिए उपयोग करना चाहिए:

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
    ... 
</bean> 

देखें http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate4/LocalSessionFactoryBean.html

  • हाइबरनेट 5.0/5.1/5.2 के मामले में, स्प्रिंग 4.3 के रूप में, तो आप बेहतर बजाय का उपयोग
org.springframework.orm.hibernate5.LocalSessionFactoryBean 

(http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate5/LocalSessionFactoryBean.html देखें)

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