2010-05-16 19 views
14

उत्पन्न करने के लिए मेवेन के साथ हाइबरनेट-टूल्स को कॉन्फ़िगर कैसे करें कोई भी मुझे बता सकता है कि स्वचालित रूप से जेनरेट किए गए हाइबरनेट में मैपिंग .hbm.xml फ़ाइलों से पहले मैवेन को कैसे मजबूर किया जाए पैकेज पथ के साथ .cfg.xml फ़ाइल?hibernate.cfg.xml, * .hbm.xml, POJOs और DAO

मेरे सामान्य विचार मैं Maven के माध्यम से हाइबरनेट-उपकरणों का उपयोग करने के लिए अपने आवेदन के लिए हठ परत जनरेट करना चाहते हैं, है। इसलिए, मुझे hibernate.cfg.xml की आवश्यकता है, फिर मेरे my_table_names.hbm.xml और अंत में पीओजेओ उत्पन्न हुआ।

<mapping resource="MyTableName.hbm.xml" /> 

तो बड़ा सवाल यह है:: फिर भी, hbm2java लक्ष्य के रूप में मैं src/main/resources/package/path/ फ़ोल्डर में * .hbm.xml फ़ाइलें डाल लेकिन hbm2cfgxml केवल तालिका नाम से मानचित्रण फ़ाइलें निर्दिष्ट करता है, यानी काम नहीं करेगा कैसे कर सकते हैं मैं hbm2cfgxml कॉन्फ़िगर करते हैं ताकि hibernate.cfg.xml नीचे दिखाई देता है:

<mapping resource="package/path/MyTableName.hbm.xml" /> 

मेरे pom.xml इस समय इस तरह दिखता है:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>hibernate3-maven-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
      <id>hbm2cfgxml</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>hbm2cfgxml</goal> 
      </goals> 
      <inherited>false</inherited> 
      <configuration> 
       <components> 
        <component> 
         <name>hbm2cfgxml</name> 
         <implemetation>jdbcconfiguration</implementation> 
         <outputDirectory>src/main/resources/</outputDirectory> 
        </component> 
       </components> 
       <componentProperties> 
        <packagename>package.path</packageName> 
        <configurationFile>src/main/resources/hibernate.cfg.xml</configurationFile> 
       </componentProperties> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

और फिर दूसरा प्रश्न: क्या hbm2java निष्पादित करने से पहले लक्षित फ़ोल्डर में संसाधनों की प्रतिलिपि बनाने के लिए मेवेन को बताने का कोई तरीका है? फिलहाल मैं

mvn clean resources:resources generate-sources 

का उपयोग कर रहा हूं, लेकिन एक बेहतर तरीका होना चाहिए।

किसी भी मदद के लिए धन्यवाद।

अद्यतन:

@Pascal: आप आपकी मदद के लिए धन्यवाद। मैपिंग का मार्ग अब ठीक काम करता है, मुझे नहीं पता कि पहले क्या गलत था। शायद डेटाबेस कॉन्फ़िगरेशन पढ़ने के दौरान hibernate.cfg.xml को लिखने के साथ कुछ समस्या है (हालांकि फ़ाइल अपडेट हो जाती है)।

मैंने फ़ाइल hibernate.cfg.xml को हटा दिया है, इसे डेटाबेस.प्रोपर्टीज के साथ बदल दिया है और hbm2cfgxml और hbm2hbmxml लक्ष्यों को चलाया है। मैं अब उन लक्ष्यों में outputDirectory और न ही configurationfile का उपयोग नहीं करता हूं।

परिणामस्वरूप hibernate.cfg.xml और सभी *.hbm.xml मेरे लक्ष्य/हाइबरनेट 3/जेनरेट-मैपिंग/फ़ोल्डर में जेनरेट किए जा रहे हैं, जो डिफ़ॉल्ट मान है। तब मैं निम्नलिखित के साथ hbm2java लक्ष्य अद्यतन:

<componentProperties> 
    <packagename>package.name</packagename> 
    <configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile> 
</componentProperties> 

लेकिन तब मैं निम्नलिखित हो:

[INFO] --- hibernate3-maven-plugin:2.2:hbm2java (hbm2java) @ project.persistence --- 
[INFO] using configuration task. 
[INFO] Configuration XML file loaded: file:/C:/Documents%20and%20Settings/mmm/workspace/project.persistence/target/hibernate3/generated-mappings/hibernate.cfg.xml 
12:15:17,484 INFO org.hibernate.cfg.Configuration - configuring from url: file:/C:/Documents%20and%20Settings/mmm/workspace/project.persistence/target/hibernate3/generated-mappings/hibernate.cfg.xml 
12:15:19,046 INFO org.hibernate.cfg.Configuration - Reading mappings from resource : package.name/Messages.hbm.xml 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2java (hbm2java) on project project.persistence: Execution hbm2java of goal org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2java failed: resource: package/name/Messages.hbm.xml not found 

मैं इससे कैसे निपटते हैं? बेशक मैं जोड़ सकता है:

<outputDirectory>src/main/resources/package/name</outputDirectory> 

hbm2hbmxml लक्ष्य के लिए है, लेकिन मुझे लगता है कि यह सबसे अच्छा तरीका नहीं है, या यह क्या है? वहाँ सभी उत्पन्न कोड और संसाधनों src/ फ़ोल्डर से दूर रखने के लिए एक रास्ता है?

मुझे लगता है, इस दृष्टिकोण के लक्ष्य को मेरी src/मुख्य/जावा या/संसाधन फ़ोल्डर में किसी भी स्रोत उत्पन्न करने के लिए है, लेकिन लक्ष्य फ़ोल्डर में उत्पन्न कोड रखने के लिए नहीं है।जैसा कि मैं आम तौर पर इस दृष्टिकोण से सहमत हूं, मैं अंततः hbm2dao निष्पादित करना जारी रखूंगा और प्रोजेक्ट को व्यापार परत से जेनरेट किए गए दृढ़ता परत घटक के रूप में उपयोग करने के लिए पैकेजिंग करना चाहता हूं। क्या यह भी तुम्हारा मतलब है?

उत्तर

8

मैं hbm2cfgxml कैसे कॉन्फ़िगर कर सकते हैं ताकि hibernate.cfg.xml नीचे की तरह दिखता है (...)

मैं एक परियोजना है कि hbm2cfgxml और <mapping resource="..."/> प्रविष्टियों उपयोग कर रहा है में PackageName को प्रतिबिंबित करते हैं है hbm.xml का मार्ग। तो आपकी तरफ से कुछ गलत है। सूत्रों

  • मैं src/main/resources में लेकिन target/classses में फाइल उत्पन्न नहीं होता (तुम क्यों में उत्पन्न सामान रख सकता हूं

    • मैं generate-resources चरण पर hbm2cfgxml बाध्य हैं, तो आप पैदा नहीं कर रहे हैं: यहाँ कुछ टिप्पणी कर रहे हैं स्रोत पेड़, आप इसे साफ करने के लिए clean चाहते हैं)।
    • इसमें गलत वर्तनी, यह, configurationfile नहीं configurationFile लेकिन
    • क्यों नरक तुम hbm2cfgxml के विन्यास में एक <configurationfile> की क्या ज़रूरत है ...? आप इसे यहां उत्पन्न करना चाहते हैं ... मैं इसे हटा दूंगा।

    अद्यतन: आप जानकारियां src/main/resources/database.properties में डेटाबेस से कनेक्ट करने के लिए आवश्यक (कि propertyfile संपत्ति का डिफ़ॉल्ट मान है) रखना चाहिए, src/main/resources/hibernate.cfg.xml में नहीं (उस फ़ाइल निकालने के लिए)। एक नमूना database.properties नीचे:

    hibernate.connection.driver_class=org.apache.derby.jdbc.ClientDriver 
    hibernate.connection.url=jdbc:derby://localhost:1527//home/pascal/Projects/derbyDBs/EMPLDB 
    hibernate.connection.username=APP 
    hibernate.connection.password=APP 
    hibernate.dialect=org.hibernate.dialect.DerbyDialect 
    

    और जैसा कि मैंने कहा, src/main/resources/hibernate.cfg.xml फ़ाइल निकालने के लिए, आप इसे उत्पन्न करने के लिए चाहते हैं।

    क्या एचबीएम 2java निष्पादित करने से पहले लक्षित फ़ोल्डर में संसाधनों की प्रतिलिपि बनाने के लिए मेवेन को बताने का कोई तरीका है? (...)

    hbm2java लक्ष्य पहले ही (प्रलेखन से) को क्रियान्वित करने के लिए जीवन चक्र चरण प्रक्रिया-संसाधनों के निष्पादन का आह्वान। तो यह डिफ़ॉल्ट व्यवहार है और hibernate3:hbm2java या generate-sourcesके साथ होता है यदिhbm2java इसके लिए बाध्य है।

  • +0

    आपकी टिप्पणी पास्कल के लिए धन्यवाद। मैंने निष्पादन को संसाधन-संसाधनों में स्थानांतरित कर दिया, टाइपो को सही किया। 1. हाइबरनेट-उपकरण के लिए उपयोगकर्ता और पासवर्ड को कॉन्फ़िगर कैसे करना चाहिए यदि hibernate.cfg.xml (या hibernate.properties) द्वारा नहीं? यहां विचार है, hibernate.cfg.xml पढ़ा जा रहा है, और अद्यतन किया गया है यदि डेटा मॉडल में कोई भी बदलाव किया गया है। क्या कोई और इष्टतम दृष्टिकोण है? अन्य सभी विकल्प मुझे अलग सिंटैक्स के साथ 2 अलग-अलग फ़ाइलों में एक ही कॉन्फ़िगरेशन को बनाए रखने के लिए मजबूर करते हैं। मेरे दूसरे प्रश्न के बारे में, आपके उत्तर के लिए भी धन्यवाद। पथ/से/मैपिंग के बारे में मुख्य प्रश्न अभी भी खुला है। – mmm

    +0

    @mmm: मैंने अपना जवाब अपडेट कर लिया है, इसे आज़माएं। –

    +0

    आपकी मदद के लिए धन्यवाद: यह ठीक काम किया। मैंने अपना प्रश्न अपडेट किया। – mmm

    2

    ठीक है, मैं, /लक्ष्य/वर्गों/पैकेज/नाम में फ़ोल्डर hbm.xml फ़ाइलें डाल करने के लिए Maven मजबूर कर मेरी समस्या ठीक हो गई तो अंत में मेरी पोम इस तरह दिखता है:

    <build> 
        <plugins> 
         <plugin> 
          <groupId>org.codehaus.mojo</groupId> 
          <artifactId>hibernate3-maven-plugin</artifactId> 
          <version>2.2</version> 
          <executions> 
           <execution> 
            <id>hbm2cfgxml</id> 
            <phase>generate-resources</phase> 
            <goals> 
             <goal>hbm2cfgxml</goal> 
            </goals> 
            <inherited>false</inherited> 
            <configuration> 
             <components> 
              <component> 
               <name>hbm2cfgxml</name> 
               <implementation>jdbcconfiguration</implementation> 
              </component> 
             </components> 
             <componentProperties> 
              <packagename>package.name</packagename> 
             </componentProperties> 
            </configuration> 
           </execution> 
           <execution> 
            <id>hbm2hbmxml</id> 
            <phase>generate-resources</phase> 
            <goals> 
             <goal>hbm2hbmxml</goal> 
            </goals> 
            <inherited>false</inherited> 
            <configuration> 
             <components> 
              <component> 
               <name>hbm2hbmxml</name> 
               <outputDirectory>target/classes</outputDirectory> 
              </component> 
             </components> 
             <componentProperties> 
              <packagename>package.name</packagename> 
             </componentProperties> 
            </configuration> 
           </execution> 
           <execution> 
            <id>hbm2java</id> 
            <phase>generate-sources</phase> 
            <goals> 
             <goal>hbm2java</goal> 
            </goals> 
            <inherited>false</inherited> 
            <configuration> 
             <components> 
              <component> 
               <name>hbm2java</name> 
               <implementation>configuration</implementation> 
              </component> 
             </components> 
             <componentProperties> 
              <packagename>package.name</packagename> 
              <configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile> 
             </componentProperties> 
            </configuration> 
           </execution> 
           <execution> 
            <id>hbm2dao</id> 
            <phase>generate-sources</phase> 
            <goals> 
             <goal>hbm2dao</goal> 
            </goals> 
            <inherited>false</inherited> 
            <configuration> 
             <components> 
              <component> 
               <name>hbm2dao</name> 
               <implementation>configuration</implementation> 
              </component> 
             </components> 
             <componentProperties> 
              <packagename>package.name</packagename> 
              <configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile> 
             </componentProperties> 
            </configuration> 
           </execution> 
          </executions> 
          <dependencies> 
           <dependency> 
            <groupId>postgresql</groupId> 
            <artifactId>postgresql</artifactId> 
            <version>8.4-701.jdbc3</version> 
           </dependency> 
          </dependencies> 
         </plugin> 
        </plugins> 
    </build> 
    

    और यह ठीक काम करता है। जैसा कि मैं अन्य पदों में देख सकता था, कुछ शुरुआती निर्माण चरणों में hbm.xml फ़ाइलों को लक्ष्य/हाइबरनेट 3/जेनरेट-मैपिंग (जहां वे डिफ़ॉल्ट रूप से जेनरेट होते हैं) लक्ष्य/कक्षा/पैकेज/नाम (जहां हाइबरनेट-टूल्स उनके लिए दिखते हैं), लेकिन मेरे मामले में वे नहीं हैं (जो इंगित करता है कि मैं कुछ गलत कर रहा हूं)। तो अगर वहां कोई है तो यह जानकर कि यह क्या हो सकता है मैं गलत कर रहा हूं, कृपया मुझे बताएं। अन्यथा इसे पर्याप्त होना होगा।

    एक बात यह है कि काम नहीं कर रहा है: पैकेज के नाम उत्पन्न POJOs और DAOs में इस्तेमाल नहीं कर रहे हैं: लेकिन मैं इस here के लिए एक और धागा बनाया।

    अद्यतन: ठीक है, अब मुझे अंत में मिला। गायब पैकेज नामों की समस्या hbm2hbmxml लक्ष्य की कॉन्फ़िगरेशन में थी। घटकप्रॉपर्टीपैकगेनेम के साथ वहां से चूक गया, इसलिए उत्पन्न hbm.xml पूरी तरह से वर्गीकृत वर्ग नामों को याद किया। मैंने उपरोक्त पोम को अपडेट किया है, अब यह ठीक काम करता है। फ़ाइलों को लक्ष्य/कक्षा फ़ोल्डर में स्पष्ट रूप से प्रतिलिपि बनाने के संबंध में समस्या अभी भी मामला है।

    1

    हाइबरनेट 3-मेवेन-प्लगइन चेक this post का उपयोग किये बिना, मेवेन के साथ हाइबरनेट उपकरण का उपयोग करने के तरीके के बारे में एक उदाहरण के लिए। विचार है मैवेन के साथ हाइबरनेट उपकरण चींटी कार्य को चलाने के लिए। यह दृष्टिकोण आपको प्रक्रिया पर पूर्ण नियंत्रण देता है।

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