2011-09-18 12 views
9

मैं अपने स्वयं के पैटर्न का पालन करने वाले अद्वितीय आईडी की गणना और पास करने का एक कस्टम तरीका बनाने की कोशिश कर रहा हूं।क्या जेपीए में कस्टम आईडी बनाने के लिए 'genericGenerator' हाइबरनेट्स की तरह कुछ है?

हाइबरनेट में @GenericGenerator एनोटेशन है जो आपको एक अद्वितीय आईडी की गणना करने और @Id कॉलम पर वापस असाइन करने के लिए कस्टम क्लास को मैप करने देता है।

उदाहरण

@Id 
    @GeneratedValue(generator="MyIdGenerator") 
    @GenericGenerator(name="MyIdGenerator", strategy="com.test.MyIdGenerator") 

बात यह है कि मैं का उपयोग नहीं करना चाहते पैकेज के स्तर पर (hibernates) @GenericGenerator। क्या यह "शुद्ध" जेपीए/2 में हो सकता है?

आपके समय के लिए धन्यवाद।

उत्तर

14

नहीं, इसमें नहीं है। तीसरे पक्ष के बिना केवल संभावना ही आपके द्वारा मूल्य असाइन करना है। यदि आप आईडी को सेट करने वाली कॉलिंग विधि से खुद को सहेजना चाहते हैं, तो उदाहरण के लिए प्रीपेरिस्ट कॉलबैक का उपयोग किया जा सकता है।

@PrePersist 
    public void ensureId() { 
    id = ... 
    } 
+1

वास्तव में बहुत ही सुरुचिपूर्ण समाधान। क्या यह वास्तव में अनुमति है? यह विनिर्देश संदिग्ध है जब यह कहता है: सामान्य रूप से, एक पोर्टेबल एप्लिकेशन की जीवन चक्र विधि को EntityManager या क्वेरी ऑपरेशंस, अन्य इकाई उदाहरणों तक पहुंचने, या के समान संबंधों को संदर्भित नहीं करना चाहिए [46]। [47] एक लाइफसाइक्ल कॉलबैक विधि गैर-रिलेशनशिप उस इकाई की स्थिति को संशोधित कर सकती है जिस पर इसे लागू किया जाता है। –

1

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

http://wiki.eclipse.org/EclipseLink/Examples/JPA/CustomSequencing

जेपीए 2.0 एक कस्टम अनुक्रम जनरेटर को परिभाषित नहीं करता है, लेकिन जेपीए 2.1 एक कनवर्टर एपीआई, जो काम का हो सकता है परिभाषित करता है।