Slick

2014-09-19 11 views
10

में कई मनमाने ढंग से कॉलम चुनना मैं एक दृश्य के खिलाफ SELECT *-स्टाइल क्वेरी चलाने की कोशिश कर रहा हूं। आदर्श रूप में, मैं एक फ़ंक्शन के साथ समाप्त होता हूं जिसे आप Seq[String] के रूप में कॉलम नामों का एक सेट पास कर सकते हैं और यह SELECT col1, col2, ... FROM view क्वेरी निष्पादित करेगा। यदि यह व्यवहार्य नहीं है तो सभी कॉलम (SELECT * FROM view) को वापस करने के लिए स्वीकार्य होगा।Slick

मुझे पता है कि मैं इस दृश्य के साथ-साथ एक साथ केस क्लास के लिए Table कक्षा को परिभाषित करके ऐसा कर सकता हूं, लेकिन इनमें से कुछ विचारों में सैकड़ों कॉलम हैं (जिन्हें नेस्टेड टुपल्स की आवश्यकता होगी, बशर्ते कि 22 तत्व सीमा हो tuples), और ऐसे कई विचार हैं जिनके लिए मुझे यह करना होगा, इसलिए लिखने/उत्पन्न/बनाए रखने के लिए बहुत सारे कोड हैं। अगर मैं संभव हो तो उससे बचना चाहूंगा।

क्या यह स्लिम में करने योग्य है? या तो स्थिर कोड में कॉलम को परिभाषित किए बिना Table कक्षा को परिभाषित करके (गतिशील कॉलम स्ट्रिंग सूची वाले कुछ वर्ग को प्रारंभ करने के लिए स्वीकार्य होगा), या केवल sql"""...""" का उपयोग करके SQL क्वेरी उत्पन्न करके और किसी भी तरह से कॉलम के सेट को वापस करने के लिए .as[...] प्राप्त करने के लिए मनमाना लंबाई की?

मुझे वास्तविक कॉलम प्रकारों के साथ कुछ भी विशेष करने की आवश्यकता नहीं है: डेटाबेस पक्ष पर हमें प्रकारों का मिश्रण मिला है, लेकिन यदि उन्हें सभी को स्लिम पक्ष पर टेक्स्ट कॉलम के रूप में माना जाता है मेरे लिए उत्तम है।

+2

दिलचस्प सवाल, एक नोट के रूप में, कॉलम सीमा अब स्लिम के नए संस्करणों में हटा दी गई है। –

+1

@ एंडीन्यू की टिप्पणी का पालन करने के लिए, http://slick.typesafe.com/doc/2.1.0/userdefined.html#using-custom-record-types-in-queries देखें। –

उत्तर

3

Slick आपकी आवश्यकताओं के लिए उपयुक्त नहीं है।

जिस क्षण आप मनमानी कॉलम तक पहुंचना चाहते हैं (उदाहरण के लिए कॉलम नामों के List[String] का उपयोग करके), आप स्लिम प्रदान करने वाले सभी प्रकार के सुरक्षा लाभ खो रहे हैं क्योंकि यह स्कीमा को मान्य नहीं कर सकता है।

इसका मतलब है कि आपको स्लिम के टेबल कक्षाओं को पीछे छोड़ना होगा और उत्पन्न SQL का उपयोग करके पूरी तरह गतिशील समाधान के लिए जाना होगा (String क्वेरी का उपयोग करके)।

जबकि स्लिक आपको मैन्युअल रूप से एसक्यूएल लिखने की अनुमति देता है (StaticQuery.query फ़ंक्शंस पर एक नज़र डालें), अन्य पुस्तकालय कार्य के लिए बेहतर उपयुक्त हैं। मैं ScalikeJDBC पर एक नज़र डालने की सलाह देते हैं।

+1

यह निष्कर्ष है कि हम भी पहुंचे। हम jOOQ पर स्विचिंग समाप्त हो गए और बहुत खुश हुए। – Alex

+0

स्कूला एकाग्रता के साथ jOOQ कैसे चल रहा है? ('विकल्प' और ऐसा?) – Chris

+0

हम अभी भी jOOQ के लिए बिल्कुल नए हैं इसलिए मैं इस प्राधिकारिक रूप से उत्तर नहीं दे सकता, लेकिन मुझे पता चला है कि स्कैला एकीकरण सभ्य है लेकिन महान नहीं है। कुल मिलाकर jOOQ एक बहुत ही प्रभावशाली ओआरएम है और इसकी (सीमित) स्कैला एकीकरण हमें बाधित नहीं कर रहा है। – Alex

संबंधित मुद्दे