2010-04-01 16 views
5

के साथ कम कॉलम प्राप्त करना मेरे पास 11 कॉलम वाली एक तालिका है, लेकिन मुझे अपने आवेदन में केवल 2 प्राप्त करने की आवश्यकता है, मैं वसंत/हाइबरनेट/डीएओ संयोजन का उपयोग कर रहा हूं। अभी के लिए मेरे पास एक डोमेन क्लास है जिसमें सभी 11 फ़ील्ड और मैपिंग फ़ाइल शामिल है जो तालिका में सभी 11 कॉलम मैप करती है। मैं उन सभी में से केवल 2 प्राप्त करने का उपयोग कैसे करूं?हाइबरनेट

उत्तर

10

कोई एक:

  1. उपयोग अनुमानों - प्रो: -: typesafe नहीं (परिणाम पंक्तियों की एक List है जहां प्रत्येक पंक्ति किसी Object[]) है:

    select f.foo, f.bar from FatEntity f 
    
  2. उपयोग कोन जोड़ने के लिए कुछ भी नहीं है चयन खंड में एक कन्स्ट्रक्टर अभिव्यक्ति (निर्दिष्ट कक्षा को एक इकाई होने या डेटाबेस में मैप करने की आवश्यकता नहीं है) - प्रो: टाइपएफ़ समाधान - कॉन: अधिक कक्षाएं, जब तक आप FatEntity को उस मामले में धारक के रूप में पुन: उपयोग नहीं करते कई क्षेत्रों null हो जाएगा:

    select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f 
    

    ध्यान दें कि एक इकाई वर्ग के नाम SELECT NEW खंड में निर्दिष्ट किया गया है, जिसके परिणामस्वरूप इकाई उदाहरणों नई स्थिति में हैं (कोई लगातार पहचान)।

  3. केवल उसी फ़ील्ड पर मैप किए गए किसी अन्य इकाई का उपयोग केवल आवश्यक फ़ील्ड के साथ करें - प्रो: यह एक वास्तविक इकाई है जिसे आप संशोधित और अपडेट कर सकते हैं - Con: अधिक कक्षाएं।

    from LightEntity 
    

# 2 और # 3 के बीच मुख्य अंतर हैं:

  • 2 सब पर एक इकाई होने के लिए धारक की आवश्यकता नहीं है।

  • # 2 में धारक किसी अन्य तालिका पर मैप किए गए एक इकाई हो सकता है।
  • यदि # 2 इकाइयों को लौटाता है, तो वे एक नए राज्य में हैं (यह एक समस्या हो सकती है या नहीं)।
+0

@ पास्कल थिवेन्ट क्या मैं अपने डोमेन क्लास में 2 फ़ील्ड नहीं छोड़ सकता और मैपिंग फाइल नहीं कर सकता? –

+0

@ गैंडफ वेल, मैंने सोचा कि कोई अन्य क्षेत्रों का उपयोग कर रहा था। यदि यह सत्य नहीं है, तो आप वास्तव में अपनी वर्तमान इकाई को बदल सकते हैं। –

+0

कई समाधानों के लिए धन्यवाद, और स्पष्टीकरण, आप इसके साथ कैसे आते हैं? expirience? किताबें पढ़ना, प्रशिक्षण? मैं आपका जवाब स्वीकार करूंगा।यदि आप मुझे सही दिशा में इंगित कर सकते हैं तो यह बहुत अच्छा होगा, जैसे: वेबसाइट, उदाहरण, किताबें। –

6

प्रयास करें:

SELECT myEntity.one, myEntity.two FROM MyEntity myEntity 

तुम भी कर सकते हैं:

SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity 

इकाई विवरण की एक सूची प्राप्त करने के।

2

यदि आपको तालिका के उन 2 कॉलम से अधिक की आवश्यकता नहीं है, तो आप इकाई वर्ग में केवल 2 आवश्यक कॉलम को मानचित्रित करने के लिए अपने हाइबरनेट मैपिंग को बदल सकते हैं। केवल उन तालिका कॉलम को मानचित्र करें जिन्हें आप अपने एप्लिकेशन में एक्सेस करना चाहते हैं। ध्यान रखें, "अनदेखा" कॉलम पर डेटाबेस बाधाओं का उल्लंघन नल बाधाओं, विदेशी कुंजी या अद्वितीय बाधाओं जैसे उल्लंघन नहीं किया जा सकता है।

+0

डोमेन क्लास के बारे में क्या मुझे वहां 2 फ़ील्ड होने की आवश्यकता है? –