हाइबरनेट में @Temporal एनोटेशन का उपयोग क्या है?


102

हाइबरनेट प्रलेखन में @Temporalएनोटेशन के लिए नीचे दी गई जानकारी है :

सादे जावा एपीआई में, समय की अस्थायी सटीकता को परिभाषित नहीं किया गया है। अस्थायी डेटा से निपटने के दौरान आप डेटाबेस में अपेक्षित सटीकता का वर्णन कर सकते हैं। टेम्पोरल डेटा में DATE, TIME या TIMESTAMP परिशुद्धता (यानी वास्तविक तिथि, केवल समय या दोनों) हो सकती है। ठीक धुन के लिए @Temporal एनोटेशन का उपयोग करें।

क्या करता है temporal precision of time is not defined मतलब है? temporalडेटा और इसकी परिशुद्धता क्या है ? यह कैसे ठीक धुन करता है?


3
यदि आप कैलेंडर को अपनी इकाई संपत्ति के रूप में उपयोग करते हैं, तो सादे जावा में यह बहुत सारी जानकारी प्रिंट करता है, जो आवश्यक नहीं है जब आप इसे डेटाबेस में सहेजना चाहते हैं, उदाहरण के लिए। उस स्थिति में, आपके पास @Temporal (TemporalTT.TIMESTAMP) जैसा कुछ हो सकता है अपनी इकाई में टाइमस्टैम्प को अपने डेटाबेस में स्टोर करने के लिए कैलेंडर कैलेंडर या अपनी कैलेंडर संपत्ति पर @Temporal (TemporalType.DATE) या @Temporal (TemporalType.TIME) को बदलकर या केवल दिनांक या समय।
user3487063

जवाबों:


104

यह एनोटेशन निरंतर फ़ील्ड या प्रकार के गुणों के लिए निर्दिष्ट किया जाना चाहिए java.util.Dateऔरjava.util.Calendar । यह केवल इन प्रकारों के क्षेत्रों या गुणों के लिए निर्दिष्ट किया जा सकता है।

Temporalटिप्पणी के साथ संयोजन के रूप में इस्तेमाल किया जा सकता Basicएनोटेशन, Idटिप्पणी या ElementCollectionएनोटेशन (जब तत्व संग्रह मूल्य इस तरह के एक अस्थायी प्रकार का है।

सादे जावा एपीआई में, समय की अस्थायी सटीकता को परिभाषित नहीं किया गया है। अस्थायी डेटा से निपटने के दौरान, आप डेटाबेस में अपेक्षित सटीकता का वर्णन करना चाह सकते हैं। टेम्पोरल डेटा में DATE, TIME या TIMESTAMP परिशुद्धता हो सकती है (यानी, वास्तविक तिथि, केवल समय, या दोनों)। @Temporalठीक धुन के लिए एनोटेशन का उपयोग करें ।

लौकिक डेटा समय से संबंधित डेटा है। उदाहरण के लिए, एक सामग्री प्रबंधन प्रणाली में, एक लेख की निर्माण-तिथि और अंतिम-अपडेट की गई तिथि अस्थायी डेटा होती है। कुछ मामलों में, अस्थायी डेटा को सटीकता की आवश्यकता होती है और आप सटीक तिथि / समय या दोनों को संग्रहीत करना चाहते हैं (TIMESTAMP डेटाबेस तालिका में ) ।

कोर जावा एपीआई में अस्थायी सटीकता निर्दिष्ट नहीं है। @Temporalएक JPAएनोटेशन है जो टाइमस्टैम्प और के बीच आगे और पीछे धर्मान्तरित होता है java.util.Date। यह time-stampसमय में भी परिवर्तित हो जाता है। उदाहरण के लिए, नीचे दिए गए स्निपेट में, @Temporal(TemporalType.DATE) समय मान को गिराता है और केवल दिनांक को संरक्षित करता है

@Temporal(TemporalType.DATE)
private java.util.Date creationDate;

जेवाडोक के अनुसार,

क्वेरी विधि मापदंडों पर एक उपयुक्त {@code TemporalType} घोषित करने की घोषणा। ध्यान दें कि इस एनोटेशन का उपयोग केवल डिफ़ॉल्ट रूप से {@link तिथि} प्रकार के मापदंडों पर किया जा सकता हैTemporalType.DATE

[विभिन्न स्रोतों से एकत्रित जानकारी]


मैं इसे जावा प्रकार टाइमस्टैम्प के साथ क्यों नहीं इस्तेमाल कर सकता हूं?
पाउडर 366

3
तो अगर आप सिर्फ TemporalType.TIMESTAMP का उपयोग कर रहे हैं ... तो क्या इस एनोटेशन का उपयोग करने का कोई मतलब है? इसके बिना डेट्स ठीक काम लगती हैं ..
अमलगोविनास

मैं प्रारूप में MySql DB में कैसे स्टोर कर सकता हूंyyyy-MM-dd
शांताराम तुपे

@ शांताराम_ यह आपकी मदद कर सकते हैं
अंकुर सिंघल

1
मैं इनपुट: 02/10/2017और करने के लिए इसे परिवर्तित करना चाहते हैं 2017-10-02या2017/10/02
शांताराम Tupe

43

@Temporal एक जेपीए एनोटेशन है जिसका उपयोग निम्नलिखित स्तंभ वस्तुओं पर डेटाबेस तालिका में संग्रहीत करने के लिए किया जा सकता है:

  1. दिनांक ( java.sql.Date)
  2. समय ( java.sql.Time)
  3. टाइमस्टैम्प ( java.sql.Timestamp)

आम तौर पर जब हम Dateकक्षा में एक क्षेत्र घोषित करते हैं और इसे संग्रहीत करने का प्रयास करते हैं।
यह डेटाबेस में TIMESTAMP के रूप में संगृहीत होगा ।

@Temporal
private Date joinedDate;

उपरोक्त कोड 08-07-17 04: 33: 35.870000000 पीएम की तरह मूल्य संग्रह करेगा

यदि हम डेटाबेस में केवल DATE स्टोर करना चाहते हैं , तो
हम उपयोग / परिभाषित कर सकते हैं TemporalType

@Temporal(TemporalType.DATE)
private Date joinedDate;

इस बार, यह डेटाबेस में 08-07-17 स्टोर करेगा

कुछ अन्य विशेषताएँ भी हैं @Temporalजिनका उपयोग आवश्यकता के आधार पर किया जा सकता है।


डिफ़ॉल्ट मान TemporalType.DATE है। पता नहीं है कि आपने समय-भाग के साथ गैर-एनोटेट विशेषता मान के लिए क्यों प्रदान किया है।
साइमन लॉजिक

अगर दो तारीखें समान हैं तो उपरोक्त पहलू काम कर रहा है (TemporalType.DATE)।
लोवा चित्तमुरी

उत्तर को कॉपी पेस्ट न करें। stackoverflow.com/questions/25333711/…
लोवा चित्तमुरी

10

टेम्पोरल प्रकार, समय-आधारित प्रकारों का समूह होता है जिसका उपयोग लगातार राज्य मैपिंग में किया जा सकता है।

समर्थित अस्थायी प्रकार की सूची तीन शामिल java.sqlप्रकार java.sql.Date, java.sql.Time, और java.sql.Timestamp, और यह दो शामिल हैं java.utilप्रकार java.util.Dateऔरjava.util.Calendar

java.sqlप्रकार पूरी तरह से परेशानी से मुक्त हैं। वे किसी अन्य सरल मानचित्रण प्रकार की तरह कार्य करते हैं और किसी विशेष विचार की आवश्यकता नहीं होती है।

java.utilहालाँकि, दो प्रकार के अतिरिक्त मेटाडेटा की आवश्यकता होती है, जो यह इंगित java.sqlकरने के लिए कि जेडीबीसी ड्राइवर के साथ संवाद करते समय कौन से जेडडीबीसी का उपयोग करें। यह उन्हें एनोटेशन के साथ @Temporalएनोटेट करके और जेडीबीसी प्रकार को TemporalTypeएन्यूमरेटेड प्रकार के मूल्य के रूप में निर्दिष्ट करके किया जाता है ।

प्रत्येक java.sqlप्रकार का प्रतिनिधित्व करने के लिए DATE, TIME और TIMESTAMP के तीन प्रगणित मान हैं।


4

इसे इस्तेमाल करो

@Temporal(TemporalType.TIMESTAMP)
@Column(name="create_date")
private Calendar createDate;

public Calendar getCreateDate() {
    return createDate;
}

public void setCreateDate(Calendar createDate) {
    this.createDate = createDate;
}

4

यदि आप छोटे उत्तर की तलाश में हैं:

Java.util.Date का उपयोग करने के मामले में, जावा वास्तव में SQL प्रकारों से सीधे संबंधित नहीं है। यह तब है जब@Temporal खेल में आता है। इसका उपयोग वांछित SQL प्रकार को निर्दिष्ट करने के लिए किया जाता है।

स्रोत: बाल्डुंग


3

मैं हाइबरनेट 5.2 का उपयोग करता हूं और @Temporalअब इसकी आवश्यकता नहीं है।
java.util.date , sql.date , time.LocalDate को डेट / टाइमपास के रूप में उपयुक्त डेटाटाइप के साथ DB में संग्रहीत किया जाता है।


तो क्या समाधान है अगर हम केवल हाइबरनेट 5.x का उपयोग कर तारीख सहेजना चाहते
किलोमीटर

जावा 8 लोकलडेट का उपयोग
जोश

1

हम डेटाबेस तालिका में दिनांक, समय या दोनों सम्मिलित करने के लिए @ टेंपोर्मल एनोटेशन का उपयोग करते हैं। TemporalType का उपयोग करके हम डेटा, समय या दोनों इंट टेबल डाल सकते हैं।

@Temporal(TemporalType.DATE) // insert date
@Temporal(TemporalType.TIME) // insert time
@Temporal(TemporalType.TIMESTAMP) // insert  both time and date.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.