2012-11-30 17 views
6

मैं अपने वेब एप्लिकेशन के लिए स्प्रिंग 3.1.2 और हाइबरनेट 4.1.7 का उपयोग कर रहा हूं। मैं अब इन दोनों को कॉन्फ़िगर करना चाहता हूं। मैं अपने hibernate.cfg.xml फ़ाइल है:वसंत-हाइबरनेट कॉन्फ़िगरेशन में डेटा स्रोत और सत्र फ़ैक्टरी दोनों को कॉन्फ़िगर क्यों करें?

<hibernate-configuration> 
    <session-factory> 
     <property name="connection.url">jdbc:mysql://localhost:3306/test</property> 
     <property name="connection.username">root</property> 
     <property name="connection.password">root</property> 
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.pool_size">10</property> 
     <property name="hibernate.connection.autocommit">false</property> 
     <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 
     <!-- 
     <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 
     --> 
     <property name="hibernate.show_sql">true</property> 
     <property name="hibernate.hbm2ddl.auto">update</property>  
    </session-factory> 
</hibernate-configuration> 

मेरे webapp-servlet.xml वसंत कॉन्फ़िग फ़ाइल:

<beans> 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="configLocation"> 
     <value> 
      classpath:hibernate.cfg.xml 
     </value> 
    </property> 
    <property name = "dataSource" ref = "dataSource"></property> 
</bean> 

<bean id = "dataSource" class = "org.apache.commons.dbcp.BasicDataSource"> 
    <property name = "driverClassName" value = "com.mysql.jdbc.Driver" /> 
    <property name = "url" value = "jdbc:mysql://localhost:3306/test" /> 
    <property name = "username" value = "root" /> 
    <property name = "password" value = "root" /> 
    <property name = "maxActive" value = "10" /> 
</bean> 
</beans> 
  1. क्यों मैं जब जरूरत डेटा के सभी पहले से ही हाइबरनेट विन्यास में शामिल है एक डेटास्रोत सेम कॉन्फ़िगर करने की आवश्यकता है फाइल? क्या हाइबरनेट में कुछ डिफ़ॉल्ट है जिसका उपयोग कर सकते हैं?
  2. कुछ अन्य DataSource एस क्या उपयोग कर सकते हैं?
  3. क्या मुझे अपने आवेदन के साथ हाइबरनेट काम करने के लिए कोई अन्य बीन्स या कॉन्फ़िगरेशन पैरामीटर/गुण याद आ रहा है?
+1

सभी कॉन्फ़िगरेशन विकल्प अंतर्विरोध कर सकते हैं।xml' 'LocalSessionFactoryBean' पर उपलब्ध है, बाद वाले को प्राथमिकता दें और उन्हें हाइबरनेट कॉन्फ़िगरेशन में छोड़ दें। –

+0

ठीक है। लेकिन मैं अभी भी उन्हें केवल एक ही स्थान पर चाहता हूं, अलग-अलग फाइलों या सेम में दोहराया नहीं जाता है। –

+2

मैं यही कह रहा हूं, 'hibernate.cfg.xml' से डेटा स्रोत कॉन्फ़िगरेशन को हटा दें और इसे स्प्रिंग एक्सएमएल में छोड़ दें। आप बाद में उसी 'डेटा स्रोत' बीन का उपयोग कर सकते हैं उदा। 'जेडीबीसी टेम्पलेट' में। –

उत्तर

8
  1. आप उन दोनों को जरूरत नहीं है। आप या तो hibernate.cfg.xml से छुटकारा पा सकते हैं और LocalSessionFactoryBean में सब कुछ कॉन्फ़िगर कर सकते हैं, या अपने मौजूदा hibernate.cfg.xml को पुन: उपयोग कर सकते हैं (इस मामले में आपको स्प्रिंग कॉन्फ़िगरेशन में DataSource कॉन्फ़िगर करने की आवश्यकता नहीं है)।

  2. आप निम्नलिखित विकल्प हैं:

    • उपयोग embedded database - यह परीक्षण और सीखने प्रयोजनों

    • उपयोग DriverManagerDataSource के लिए अच्छा है - यह एक सरल गैर जमा डेटा स्रोत है कि परीक्षण के लिए इस्तेमाल किया जा सकता है, आदि (उत्पादन के उपयोग के लिए अनुशंसित नहीं)

    • डीबीसीपी या सी 3 पी 0

    • जैसे कनेक्शन पूल का उपयोग करें
    • आप अनुप्रयोग सर्वर को तैनात यदि आप कनेक्शन पूल अनुप्रयोग सर्वर using JNDI

  3. आपके मौजूदा विन्यास के लिए पर्याप्त है द्वारा प्रदान का उपयोग कर सकते हैं, लेकिन यह Spring transaction management के समर्थन का अभाव है। ताकि इसे सक्षम करने के लिए आप

    • की जरूरत घोषित HibernateTransactionManager

    • कथात्मक लेनदेन प्रबंधन (@Transactional)

    • सक्षम करने के लिए घोषित TransactionTemplate आप कार्यक्रम संबंधी लेन-देन प्रबंधन उपयोग करना चाहते हैं <tx:annotation-driven> जोड़ें (इसका इस्तेमाल घोषणात्मक लेनदेन प्रबंधन की सीमाओं को दूर करने के लिए)

    • भी भूलना न भूलें हाइबरनेट विन्यास से लेन-देन से संबंधित गुण को दूर करने के बाद से वे वसंत लेनदेन प्रबंधन के साथ अपने `hibernate.cfg से

+0

डिफ़ॉल्ट रूप से C3P0 का उपयोग हाइबरनेट नहीं करता है? लेनदेन प्रबंधन के लिए धन्यवाद, मैं भी इसके लिए देख रहा था। पूर्ण उत्तर के रूप में स्वीकृत। –

+1

@SotiriosDelimanolis: यदि आप इसे 'hibernate.cfg.xml' का उपयोग करके कॉन्फ़िगर करते हैं - हाँ। लेकिन वसंत 'डेटासोर्स' कॉन्फ़िगरेशन से हाइबरनेट कॉन्फ़िगरेशन को रद्द करता है, इसलिए आप विभिन्न 'डेटा स्रोत' कार्यान्वयन का उपयोग कर सकते हैं। – axtavt

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