2008-12-17 19 views
10
@Column(name="DateOfBirth") 
private Date dateOfBirth; 

मुझे विशेष रूप से "डेटऑफबर्थ" नामक कॉलम बनाने के लिए उपरोक्त कोड की आवश्यकता है, इसके बजाय हाइबरनेट मुझे date_of_birth नामक कॉलम देता है। मेरे द्वारा इसे कैसे बदला जा सकता है? क्या कोई वेब.एक्सएमएल संपत्ति है? मैं DefaultNamingStrategy और ImprovedNamingStrategy भर में आया, लेकिन यह सुनिश्चित नहीं है कि एक या दूसरे को कैसे निर्दिष्ट किया जाए।हाइबरनेट कॉलम नाम मुद्दे

+0

संभावित कार्यप्रणाली। यदि आप इसे दिनांकित करते हैं तो डीबी में कॉलम का नाम इस तरह दिया जाएगा, लेकिन विशेषता का नाम वही होना चाहिए। – OscarRyz

+0

अच्छी कॉल - यह काम किया। धन्यवाद! – lucas

+0

मुझे इसे एक उत्तर के रूप में रखने दें :) – OscarRyz

उत्तर

5

यहां एक संभावित कामकाज है: यदि आप इसे dateofbirth नाम देते हैं तो डीबी में कॉलम का नाम इस तरह दिया जाएगा, लेकिन विशेषता का नाम समान होना चाहिए।

हाइबरनेट डेटाबेस कॉलम बनाने/पढ़ने के लिए ऊंट केस प्रारूप लेता है।

मुझे इससे पहले समस्या थी। मैंने एक विरासत कॉलम के साथ काम किया जहां स्तंभ नाम "नियोक्ता नाम", "नियोक्ता", "विभाग स्थान" में कोई स्थान नहीं था। मुझे इससे नफरत है क्योंकि मेरे सभी सेम गुणों को ऊंट के मामले में होना था।

"_" से अलग डेटाबेस कॉलम का उपयोग ठीक से ऊंट के रूप में किया जाएगा जैसा कि आपने अभी देखा है।

0

मैं 100% निश्चित नहीं हूं, लेकिन क्या आपको विधि को एनोटेट करने की आवश्यकता नहीं है, न कि निजी चर?

+0

मुझे ऐसा नहीं लगता?कम से कम, मैं आवृत्ति चर स्तर पर लंबाई जैसी चीजें निर्दिष्ट कर सकता हूं और वे तदनुसार कॉलम बदल देंगे .. – lucas

+0

आप किसी एक को एनोटेट कर सकते हैं, लेकिन आपको उन्हें लगातार एनोटेट करना होगा। यदि आप उन्हें मिलाते हैं और कुछ शीर्षकों और कुछ गेटर्स को एनोटेट करते हैं, तो यह एक पाएगा और दूसरे को अनदेखा करेगा। –

6

गेटर पर @Column एनोटेशन रखो:

@Column(name="DateOfBirth") 
public Date getDateOfBirth() { 
... 
} 
+1

यह मेरे लिए काम किया – chaostheory

1

आप या तो खेतों या गेटर तरीकों टिप्पणी कर सकते हैं, यह एक फर्क नहीं है। क्या आप अपना पूरा hibernate.cfg.xml या persistence.xml फ़ाइल पोस्ट कर सकते हैं?

1

प्रस्तावित कार्यवाही @ कॉलम (नाम = "डेटफॉर्थ") का उपयोग करना था, जो मेरे उद्देश्यों के लिए काम करता था।

+0

क्या आप कह रहे हैं कि आपके द्वारा किए गए एकमात्र परिवर्तन पूंजीकरण में थे? –

+0

हाँ। ऐसा लगता है कि बेहतर नामकरणस्ट्रेटी अपराधी था, जो कैमेलकेस कॉलम नाम देखता है और लोअरकेस + अंडरस्कोर में परिवर्तित होता है। बग या फीचर, आप तय करते हैं। – lucas

22

एफवाईआई: अंडरस्कोर के सम्मिलन का कारण शायद इसलिए है क्योंकि आप ImprovedNamingStrategy का उपयोग कर रहे हैं। यह आपके Configuration ऑब्जेक्ट पर सेट है। उदाहरण के लिए here देखें ...

यदि आप अंडरस्कोर नहीं चाहते हैं तो आप नामकरण रणनीति सेट नहीं कर सकते हैं, या इसे पहले डिफॉल्ट नामकरण रणनीति पर सेट कर सकते हैं।

+0

यह वास्तव में इस समस्या का कारण है। मेरे लिए एक आकर्षण की तरह काम करता है। –

4

ImprovedNamingStrategy विधि addUnderscores() आप अपने खुद के नामकरण रणनीति वर्ग को लागू करने और अपनी पसंद के अनुसार इन ओवरराइड कर सकते हैं जो TableName() और columnName() से कहा जाता है है

public class MyOwnNamingStrategy extends ImprovedNamingStrategy { 
     @Override 
     public String tableName(String tableName) { 
     //return addUnderscores(columnName); // skip this 
     return columnName; // if you want column name variable name same 
     //return changeAsYouWant(columnName); // as name sames 
     } 
    } 
+0

मैं आपको किसी विशेष टैबलेट पर "सुपर (टेबलनाम)" भी कॉल करने का सुझाव दूंगा, आपको अपने विशेष सम्मेलन की आवश्यकता नहीं है ... शायद – willsteel

2

में इस डाल प्रयास करें

application.properties

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 
+0

यह मेरे लिए स्प्रिंग बूट एप्लिकेशन में काम करता है। –

0

वसंत बूट के मामले में संपत्ति नीचे जोड़ें।

spring.jpa.hibernate.naming.implicit-रणनीति = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-रणनीति = org.hibernate.boot.model.naming .PysicalNamingStrategyStandardImpl

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