मैं हाइबरनेट के साथ नौसिखिया हूं, और मैं एक विशिष्ट फिल्टर से मेल खाने वाली वस्तुओं की सूची को वापस करने के लिए एक सरल विधि लिख रहा हूं। List<Foo>
एक प्राकृतिक वापसी प्रकार लग रहा था।
मैं जो कुछ भी करता हूं, मैं कंपाइलर को खुश नहीं कर सकता, जब तक कि मैं एक बदसूरत काम नहीं करता @SuppressWarnings
।
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
public class Foo {
public Session acquireSession() {
// All DB opening, connection etc. removed,
// since the problem is in compilation, not at runtime.
return null;
}
@SuppressWarnings("unchecked") /* <----- */
public List<Foo> activeObjects() {
Session s = acquireSession();
Query q = s.createQuery("from foo where active");
return (List<Foo>) q.list();
}
}
मैं उससे छुटकारा पाना चाहूंगाSuppressWarnings
। लेकिन अगर मैं करता हूं, तो मुझे चेतावनी मिलती है
Warning: Unchecked cast from List to List<Foo>
(मैं इसे अनदेखा कर सकता हूं, लेकिन मैं इसे पहले स्थान पर नहीं लाना चाहूंगा), और अगर मैं .list()
वापसी प्रकार के अनुरूप सामान्य हटा देता हूं, तो मुझे चेतावनी मिलती है
Warning: List is a raw type. References to generic type List<E>
should be parameterized.
मैंने देखा कि घोषणा org.hibernate.mapping
करता है एक List
; लेकिन यह पूरी तरह से एक अलग प्रकार है - Query
एक java.util.List
, एक कच्चे प्रकार के रूप में। मुझे यह अजीब लगता है कि हाल ही में हाइबरनेट (4.0.x) पैरामीटर प्रकारों को लागू नहीं करेगा, इसलिए मुझे संदेह है कि यह मेरे बजाय कुछ गलत है।
यह बहुत हद तक कास्ट हाइबरनेट परिणाम वस्तुओं की एक सूची की तरह दिखता है , लेकिन यहां मेरे पास कोई "कठिन" त्रुटियां नहीं हैं (सिस्टम प्रकार फू जानता है, और मैं एसक्यूएलक्यूआई का उपयोग नहीं कर रहा हूं लेकिन एक सीधी क्वेरी)। तो कोई आनंद नहीं।
मैंने हाइबरनेट क्लास कास्ट एक्सेप्शन को भी देखा है क्योंकि यह बहुत अच्छा लग रहा था, लेकिन तब मुझे एहसास हुआ कि मुझे वास्तव में कोई नहीं मिलता Exception
... मेरी समस्या सिर्फ एक चेतावनी की है - एक कोडिंग स्टाइल, अगर आप करेंगे।
Jboss.org, हाइबरनेट मैनुअल और कई ट्यूटोरियल पर दस्तावेज़ीकरण इस तरह के विस्तार से विषय को कवर नहीं करते हैं (या मैंने सही स्थानों पर खोज नहीं की?)। जब वे विस्तार से प्रवेश करते हैं, तो वे ऑन-द-फ्लाई कास्टिंग का उपयोग करते हैं - और यह उन ट्यूटोरियल पर है जो आधिकारिक jboss.org साइट पर नहीं थे, इसलिए मैं थोड़ा सावधान हूं।
कोड, एक बार संकलित, कोई स्पष्ट समस्या के साथ चलता है ... कि मुझे पता है ... अभी तक; और परिणाम अपेक्षित हैं।
तो: क्या मैं यह सही कर रहा हूं? क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है? क्या कोई "आधिकारिक" या "अनुशंसित" तरीका है इसे करने के लिए ?