MySql57Dialect
(और/या MySql57InnoDbDialect
, हाइबरनेट के संस्करण के आधार पर), TIMESTAMP
SQL प्रकार पहले से ही एक TIMESTAMP(6)
में मैप किया गया है डेटाबेस कॉलम प्रकार:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
इसका मतलब है कि डिफ़ॉल्ट कॉलम परिभाषा को माइक्रोसेकंड परिशुद्धता का समर्थन करना चाहिए। कार्रवाई का सबसे अच्छा तरीका यह है कि हाइबरनेट को कॉलम परिभाषा को ओवरराइड किए बिना स्कीमा उत्पन्न करने दें। अधिकांश अन्य डेटाबेस के लिए, यह एक साधारण TIMESTAMP
. में शानदार ढंग से अवक्रमित हो जाएगा .
यदि आप भविष्य में किसी अन्य डेटाबेस पर स्विच करना चाहते हैं जो माइक्रोसेकंड परिशुद्धता का भी समर्थन करता है, तो प्रासंगिक Dialect
देखें।; इसमें संभवतः सुविधा के लिए समर्थन शामिल होगा, और यदि नहीं, तो आप इसे हमेशा अनुकूलित कर सकते हैं।
ऐसा इसलिए है क्योंकि registerColumnType
. में ऊपर कॉल करें, TIMESTAMP
. की सटीकता 6 पर तय किया गया है। यदि आप इसे अनुकूलित करने में सक्षम होना चाहते हैं, तो अपनी स्वयं की कस्टम बोली (MySql57Dialect
से विस्तारित) को रोल आउट करें। ) और इसके साथ परिभाषा को ओवरराइड करें:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
फिर आप length
. का उपयोग करके कॉलम की लंबाई को ओवरराइड करने में सक्षम होंगे , precision
, या scale
(यह निर्भर करता है कि आपने कोष्ठक के अंदर क्या रखा है)। ध्यान दें कि विधि का दूसरा तर्क इस विशेष डेटाटाइप के लिए अधिकतम संभव कॉलम लंबाई को परिभाषित करता है, इसलिए यदि आप चाहते हैं उदा। नैनोसेकंड सटीक, आपको इसे 9 में बदलना चाहिए।