java - JPA - saving @Version as datatype long -
मेरे पास ऐसा मॉडल है:
<पूर्व> @ एंटीटी सार्वजनिक वर्ग इवेंट मॉडल का विस्तार {@ आईडी सार्वजनिक लंबे आईडी; सार्वजनिक स्ट्रिंग का नाम; @ संस्करण सार्वजनिक टाइमस्टैम्प बनाया गया; }
इस ऑब्जेक्ट पर .save ()
चलाते समय, मुझे निम्न रिकॉर्ड मिलता है:
id | नाम | बनाया ---- + -------- + ------------------------- 1 फ़ूबार | 2014-11-04 20: 25: 40.194
जैसा कि आप देख सकते हैं, बनाया
फ़ील्ड को एक एसक्यूएल टाइमस्टैम्प प्रारूप के रूप में। क्या यह इसे वास्तविक BIGINT
या लंबे
डेटा प्रकार के रूप में बदलने के लिए संभव है? बस बनाया गया
से बदलना सार्वजनिक
एक त्रुटि उत्पन्न करता है:
java.lang.ClassCastException: java.lang.Long को जावा में डाला नहीं जा सकता JPA 2.0 विनिर्देश के अनुसार, अध्याय 11.1.50 संस्करण व्याख्या:। एसक्यूएल। टेस्टस्टेप
निम्नलिखित प्रकारों को संस्करण गुणों के लिए समर्थन दिया जाता है: int, पूर्णांक, लघु, लघु, लंबा, लंबा, टाइमस्टैम्प।
यदि मौजूदा डेटाबेस स्कीमा को छोड़ना संभव है तो इकाई के
java.sql.Timestamp
क्षेत्र कोjava.lang.Long
के साथ बदलने के लिए पर्याप्त होगा और फिर डेटाबेस स्कीमा को पुन: बनाएँ, इसलिए संबंधित डेटाबेस कॉलम को लंबे समय से बदल दिया जाएगा।यदि मौजूदा डेटाबेस स्कीमा को छोड़ना संभव नहीं है (यानी विरासत डेटाबेस) तो इकाई एक स्पष्ट जगह बना सकती है
java.lang.Long
सेjava.sql.Timestamp
से रूपांतरण करके आप यू कन्स्ट्रक्टर से:
टाइमस्टैम्प बनाया = नया टाइमस्टैम्प (13 9 7240740194 एल); // 2014-11-04 20: 25: 40.194 लंबी टाइमस्टैम्प = बनाया.गेट टाइम ();
मैं प्रदर्शन कारणों के लिए
java.math.BigInteger
का उपयोग करने की सिफारिश नहीं करता जब तक कि वास्तव में आवश्यक नहीं (कोई भी उपयोग-केस?)।
साइड नोट:
सामान्य तौर पर, संस्करण एनोटेशन के साथ निर्दिष्ट क्षेत्रों या गुणों को एप्लिकेशन द्वारा अपडेट नहीं किया जाना चाहिए।
दूसरे शब्दों में, दृढ़ता संदर्भ संस्करण फ़ील्ड / कॉलम को अपडेट करने का ध्यान रखता है आवेदन को केवल बल्क अपडेट के मामले में ही रखना चाहिए, जब दृढ़ता के संदर्भ को छोड़ दिया जाता है और आशायात्मक लॉकिंग चेक बाईपास होते हैं।
Comments
Post a Comment