मेरे पास एक टाइमस्टैम्प रखने के लिए नियत एक कॉलम है जिसे java.util.Date डेटा प्रकार के साथ परिभाषित किया गया है और डेटाबेस में ओरेकल DATE प्रकार में संग्रहीत किया गया है। मैंने सत्यापित किया है कि पूर्ण दिनांक और समय की जानकारी डेटाबेस से ठीक से पुनर्प्राप्त और पुनर्प्राप्त की जाती है, लेकिन जब मैं इसे NamedQuery में तुलना करने का प्रयास करता हूं, तो समय की जानकारी तुलना में ध्यान में नहीं लेती है।जेपीए: टाइमेडैम्प तुलना NamedQuery में: समय डेटा खो गया
स्तंभ के रूप में निम्नानुसार परिभाषित किया गया है (analyzeDate प्रकार java.util.Date की है):
@Basic(optional = false)
@Column(name = "ANALYZE_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date analyzeDate;
और मेरे NamedQuery:
@NamedQuery(name = "BOADocument.findByBeforeAnalyzeDate",
query = "SELECT b FROM BOADocument b WHERE b.companyId = :companyId AND b.analyzeDate < :analyzeDate")
कौन सा मैं तो अमल, गुजर analyzeDate की है जो टाइप करें java.util.Date:
List<BOADocument> docs = em.createNamedQuery("BOADocument.findByBeforeAnalyzeDate")
.setParameter("companyId", clientRecord)
.setParameter("analyzeDate", analyzeDate, TemporalType.TIMESTAMP)
.getResultList()
मुझे दस्तावेज़ तालिका में सभी पंक्तियों की एक सूची वापस मिलती है , हालांकि उनके पास विश्लेषण के लिए बिल्कुल वही मान है, जिसे मैंने NamedQuery के पैरामीटर के रूप में सेट किया है।
यदि मैं तुलना में उलटा हूं, तो मुझे कोई लाइन नहीं मिलती है, और मुझे विश्वास दिलाता है कि टाइमस्टैम्प का समय हिस्सा b.analyzeDate पक्ष पर खो रहा है, न कि: चीजों का विश्लेषण करें।
मैं जेबए 1.0 का उपयोग हाइबरनेट 3.5 के साथ कर रहा हूं।
यह मुझे रोक रहा है, और मैं एक मूल प्रश्न छोड़ने और उपयोग करने के करीब हूं, लेकिन यह धोखाधड़ी की तरह लगता है!
मिलीसेकंड का मामला हो सकता है, पैरामीटर में और डेटाबेस मानों में अपना मान जांचें। – remigio
चूंकि ओरेकल डेटाबेस में कॉलम प्रकार DATE है, वहां कोई भी मिलीसेकंद जानकारी संग्रहीत नहीं है। मिलीसेकंद जानकारी java.util.Date पक्ष में मौजूद है, इसलिए मैंने चेक किया (दिनांक .getTime() दोनों की तुलना करना) और जिस मान में मैं पास करता हूं और मेरे गुणों से प्राप्त मूल्य समान हैं। अभी भी स्टंप ... – emilys