2015-01-23 9 views
7

में एनोटेशन के साथ डिफ़ॉल्ट कॉलम मान परिभाषित करें मुझे पता है कि एसओ और नेट पर भी इन प्रश्नों में से बहुत सारे प्रश्न हैं, लेकिन सभी उत्तरों columnDefinition का उपयोग करने का सुझाव देते हैं जो डेटाबेस विशिष्ट है और इसलिए मेरे लिए लागू नहीं है क्योंकि सिस्टम I ' मैं विभिन्न डेटाबेस पर चलाने की जरूरतों पर काम कर रहा हूं।हाइबरनेट

मुझे यह hibernate issue मिला जहां किसी ने एनोटेशन के लिए इस सुविधा का अनुरोध किया। मुद्दा बंद कर दिया गया है कि another issue उस कार्यक्षमता को कवर करेगा। दूसरी समस्या ने स्पष्ट रूप से एनोटेशन @Generated और कुछ अन्य लोगों को भी जोड़ा, लेकिन मुझे उन नए एनोटेशन के साथ डिफ़ॉल्ट कॉलम मान को परिभाषित करने के तरीके पर कोई दस्तावेज नहीं मिला।

तो मेरा सवाल है: क्या कोई जानता है कि मैं एनोटेशन के साथ डिफ़ॉल्ट कॉलम मान कैसे परिभाषित कर सकता हूं (और columnDefinition का उपयोग नहीं कर रहा हूं)?

संपादित करें: मेरी समस्या को और स्पष्ट करने के लिए: जब मैं एक नया नल कॉलम जोड़ता हूं, तो मुझे मौजूदा स्कीमा को अपडेट करने के लिए हाइबरनेट की आवश्यकता होती है (संबंधित तालिका में नया कॉलम जोड़ें)। लेकिन चूंकि कॉलम शून्य नहीं है, इसलिए डेटाबेस डिफ़ॉल्ट मान निर्दिष्ट किए बिना कॉलम नहीं बना सकता है (यदि तालिका में पहले से ही कुछ पंक्तियां हैं)। इसलिए मुझे निम्न डीडीएल कथन जारी करने के लिए हाइबरनेट को निर्देश देना होगा: ALTER TABLE my_table ADD COLUMN new_column VARCHAR(3) DEFAULT 'def', लेकिन इसे उपयोग किए गए डेटाबेस से स्वतंत्र होना चाहिए।

उत्तर

12

मुझे नहीं लगता कि आपको किसी दस्तावेज़ की आवश्यकता है, जावा दस्तावेज़ स्वयं समझा रहे हैं। यदि मैं आपको सही ढंग से समझता हूं तो आपको किसी फ़ील्ड के लिए डिफ़ॉल्ट मान सेट करने का एक तरीका चाहिए। यदि हां कृपया निम्नलिखित कोड स्निपेट देखें।

@Entity 
@Table(name = "my_entity") 
public class SomeEntity extends BaseEntity { 

public static final class MyValueGenerator implements 
     ValueGenerator<String> { 
    @Override 
    public String generateValue(Session session, Object owner) { 
     return "This is my default name"; 
    } 
} 

@Basic 
@Column(name = "name", insertable = true, updatable = true, nullable = false, length = 255) 
// This will add a DDL default 
@ColumnDefault("'This is my default name'") 
// This will add a runtime default. 
@GeneratorType(type = MyValueGenerator.class) 
private String name; 

// getters and setters 

} 
+0

धन्यवाद लेकिन यह केवल सम्मिलित इकाइयों पर मूल्य उत्पन्न करने लगता है। यही वह नहीं है जो मुझे चाहिए। जब डीडीएल स्टेटमेंट द्वारा कॉलम जोड़ा जाता है तो मुझे डिफ़ॉल्ट कॉलम मान को परिभाषित करने की आवश्यकता होती है (मैंने इसे स्पष्ट करने के लिए अपना प्रश्न संपादित किया)। – Jardo

+0

@Jardo क्या आपने '@ कॉलमडिफॉल्ट' एनोटेशन की कोशिश की है? मैं परिवर्तन को प्रतिबिंबित करने के लिए अपना कोड अपडेट करूंगा। – Babl

+1

@ बीबीएल यही वही है जो मुझे धन्यवाद चाहिए। मेरे पास सिर्फ एक टिप्पणी है: हाइबरनेट ने एनोटेशन से सीधे डीडीएल कथन में मूल्य डाल दिया है, इसलिए यदि आप एक स्ट्रिंग डालना चाहते हैं, तो आपको इसे अतिरिक्त उद्धरणों से बचाना होगा या अन्यथा आपको एक SQL त्रुटि मिल जाएगी। इस तरह @ @ कॉलमडिफॉल्ट ("यह मेरा डिफ़ॉल्ट नाम है" ")। यदि आप इसे प्रतिबिंबित करने के लिए अपना उत्तर संपादित करते हैं, तो यह सही होगा :) – Jardo

3

मेरे लिए काम कर रहा है।

@ColumnDefault (" '0.0'")

@Column (नाम = "avgRating")

निजी नाव avgRating;