इस तरह की समस्याओं के लिए, यह आमतौर पर JDBC ड्राइवर का संस्करण और आपके द्वारा उपयोग की जा रही बोली प्रदान करने में मदद करता है।
वैसे भी, मेरी समझ यह है कि आप वास्तव में निम्नलिखित मानचित्रण चाहते हैं (DATE के लिए और समय):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;
और आप जिस समस्या का सामना कर रहे हैं वह किसी तरह Oracle द्वारा संस्करण 9.2 के साथ पेश किए गए पागलपन से संबंधित है, देखें DATE और TIMESTAMP के साथ क्या हो रहा है?
(संक्षेप में, उन्होंने एक TIMESTAMP
. पेश किया कॉलम और DATE
की मैपिंग को बदल दिया है SQL प्रकार, अक्सर पूछे जाने वाले प्रश्न पढ़ें)। इसे हल करने के लिए कई विकल्प हैं (मैं निश्चित रूप से मान रहा हूं कि आप TemporalType.TIMESTAMP
का उपयोग कर रहे हैं। मैपिंग):
या तो TIMESTAMP
का उपयोग करें कॉलम प्रकार (मेरा मतलब यह नहीं है TemporalType.TIMESTAMP
यहां, मेरा वास्तव में डीबी पक्ष पर कॉलम प्रकार का मतलब है)। लेकिन अगर आपको नैनोसेकंड परिशुद्धता की आवश्यकता नहीं है, तो यह सबसे अच्छा विकल्प नहीं है।
या oracle.jdbc.V8Compatible=true
. सेट करें संगतता मोड, सिस्टम प्रॉपर्टी के रूप में या कनेक्शन प्रॉपर्टी के रूप में:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>
हां, आप इस तरह मनमाने ढंग से कनेक्शन गुण सेट कर सकते हैं। हाइबरनेट दस्तावेज़ीकरण से:
या Oracle JDBC 11.1 ड्राइवर का उपयोग करें (उन्होंने परिवर्तन को वापस करके समस्या को "ठीक" किया)। यह IMO आदर्श समाधान है (V8Compatible
सामग्री बहिष्कृत है)।