2011-03-09 12 views
6

के साथ हाइबरनेट में जेनरेट किए गए कॉलम और टेबल नाम डीबी स्कीमा उत्पन्न करने के लिए हाइबरनेट को कैसे मजबूर कर सकते हैं जैसे कि यह कैमेलकेस को अंडरस्कोर्स (एचबीएम का उपयोग करके) में परिवर्तित करता है? उदाहरण के लिए। मेरे पास है:अंडरस्कोर

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD//EN" 
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="cz.csas.pdb.be.model.product.passive"> 

    <class name="foo.BarBaz"> 

     <id name="barBazId"> 
      <generator class="sequence"/> 
     </id> 

     <property name="extractContactType"/> 
     <!-- ... --> 
    </class> 
</hibernate-mapping> 

और मैं इस (ओरेकल) की तरह तालिका बनाने के लिए हाइबरनेट हैं:

CREATE TABLE "BAR_BAZ" 
    (
    "BAR_BAZ_ID"    NUMBER(19,0) NOT NULL ENABLE, 
    "EXTRACT_CONTACT_TYPE"  VARCHAR2(512 CHAR), 
    -- PK etc... 
) 

मैं जानता हूँ कि मैं hbm.xml फ़ाइल में तालिका/स्तंभ नाम का उपयोग कर सकते हैं, लेकिन मैं चाहता हूँ इसे वैश्विक रूप से सेट करें (दोनों समय बचाने और त्रुटियों को रोकने के लिए)।

उत्तर

7

ImprovedNamingStrategy वही करना चाहिए जो आप चाहते हैं। 3.6. Implementing a NamingStrategy देखें।

+0

ऐसा लगता है कि यह ठीक से काम करना चाहिए, लेकिन मैं एक अपवाद की वजह से मिलता है: org.hibernate.MappingException: वही तार्किक स्तंभ नाम विभिन्न भौतिक लोगों द्वारा संदर्भित: account_charge.PASSIVEACCOUNT => 'passive_account' और 'passiveaccount'; एक साधारण से-एक के लिए (खाता चार्ज एचबीएम "<कई-से-एक नाम =" निष्क्रिय खाता "/>") है। –

5

में जेपीए 2 (हाइबरनेट 4), it is even more easier, बस जोड़ें:

<property name="hibernate.ejb.naming_strategy" 
     value="org.hibernate.cfg.ImprovedNamingStrategy" /> 

अपने persistence.xml करने के लिए।

+0

अच्छा लगता है, लेकिन मुझे एक SAX-Parse-Exception मिलता है जो कहता है कि विशेषता 'मान' को परिभाषित किया जाना चाहिए। शायद मेरे पास hibernate.cfg.xml के लिए कुछ पुरानी डीटीडी या स्कीमा है। हाइबरनेट 4.3.5-फ़ाइनल का उपयोग करना। – user152468

+1

यह बेकार ढंग से काम कर रहा है, मुझे डेटाबेस पर camelCase और डेटाबेस (sng_cql) पर snake_case का उपयोग करने की अनुमति है, मैं 4.3.8-फ़ाइनल का उपयोग कर रहा हूं – edur

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