2012-10-04 13 views
14

मैं ऐसे उत्पाद पर काम कर रहा हूं जो एकाधिक डेटाबेस इंजन (ओरेकल, एमएसएसक्यूएल, माईएसक्यूएल) का समर्थन करेगा। ओरेकल के लिए, मैं एक उच्च मात्रा की स्थापना पर संभावित समवर्तीता और लॉकिंग मुद्दों से बचने के लिए अनुक्रम तालिका के बजाय अनुक्रमों का उपयोग करना पसंद करूंगा, लेकिन अन्य डेटाबेस इंजन अनुक्रमों का समर्थन नहीं करते हैं। इसके अलावा, मैं वैश्विक अनुक्रम (जैसे hibernate_sequence) की बजाय प्रति तालिका एक अनुक्रम का उपयोग करना पसंद करूंगा, इसलिए @GeneratedValue(strategy = GenerationType.AUTO) काम नहीं करेगा। रनटाइम पर रणनीति को गतिशील रूप से चुनने का कोई तरीका है?क्या जेपीए एनोटेशन और हाइबरनेट का उपयोग करके @GeneratedValue रणनीति को गतिशील रूप से चुनने का कोई तरीका है?

उत्तर

22

दरअसल, हाइबरनेट GenerationType.AUTO और GenerationType.SEQUENCE दोनों को org.hibernate.id.enhanced.SequenceStyleGenerator का उपयोग करके व्याख्या करता है। अनुक्रम स्टाइल जेनरेटर एक आईडी पीढ़ी की रणनीति है जो अंतर्निहित डेटाबेस का समर्थन करने के आधार पर दो रणनीतियों में से एक चुनती है। यदि डेटाबेस अनुक्रमों का समर्थन करता है, तो अनुक्रम स्टाइल जेनरेटर अनुक्रमों का उपयोग करता है; यदि ऐसा नहीं होता है, तो अनुक्रम स्टाइल जेनरेटर "अनुक्रम तालिका" का उपयोग करने के लिए वापस आ जाता है। उपयोग करने के लिए जेनरेटर का यह "मानचित्रण" एक सेटिंग द्वारा नियंत्रित होता है: hibernate.id.new_generator_mappings। इसे सही करने के लिए सेट करना मैंने अभी वर्णित व्यवहार को सक्षम किया है। दुर्भाग्यवश, पीछे की संगतता कारणों के लिए, हमें इसे गलत करने के लिए डिफ़ॉल्ट करना पड़ा। तो इसका लाभ उठाने के लिए, आपको यह सुनिश्चित करना होगा कि सेटिंग सही पर सेट हो।

आगे, आप किसी भी नाम दिए जाने पर वैश्विक अनुक्रम या अनुक्रम प्रति इकाई को प्राथमिकता देने के लिए अनुक्रम स्टाइल जेनरेटर को कॉन्फ़िगर कर सकते हैं। इसे prefer_sequence_per_entity

अनुक्रम स्टाइल जेनरेटर सामान्य रूप से काफी कॉन्फ़िगर करने योग्य सेटिंग द्वारा नियंत्रित किया जाता है। अधिक जानकारी के लिए अपने javadocs पर एक नज़र डालें: http://docs.jboss.org/hibernate/orm/4.1/javadocs/index.html?org/hibernate/id/enhanced/SequenceStyleGenerator.html

+0

यह कॉन्फ़िगर करने योग्य कैसे है, मुझे अभी तक एक उदाहरण नहीं मिला है कि SequenceStyleGenerator के increment_size को कैसे बदला जाए? कॉन्फ़िगर करने के लिए पारित पैराम cfg.xml में सेट गुणों का सीमित सेट हैं। अनुकूलक और increment_size मेरे प्रयासों में से सर्वश्रेष्ठ को पारित नहीं किया जाता है। –

+2

'@ सिकेंस जेनरेटर (..., आवंटन आकार = ब्लाह)' –

+0

सुझाव के लिए धन्यवाद। लेकिन यह एक शॉर्टकट की तरह लगता है, क्योंकि अनुक्रम जेनरेटर में अनुक्रमित स्टाइल जेनरेटर में उल्लिखित कॉन्फ़िगरेशन के समान गुण नहीं हैं। मैंने कोशिश की और यह पूल किए गए ऑप्टिमाइज़र के साथ काम किया और यह मुझे प्रदर्शन की बढ़त प्रदान कर रहा था। लेकिन बंद होने के लिए। क्या cfg.xml फ़ाइल में ऐसा करने का कोई तरीका है। SequenceStyleGenerator.java पर "ऑप्टिमाइज़र" और "increment_size" को हाइबरनेट द्वारा पढ़ा नहीं गया था जब मैं इसे डिबग कर रहा था। http://stackoverflow.com/questions/19694154/hibernate-cfg-xml-configuration-for-sequence- जनरेटर –

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