के रूप में कॉलम का सबसेट पुनर्प्राप्त करना मैं Slick 3.1.1 के साथ काम कर रहा हूं और समस्या यह है कि कुछ मामलों में मैं कुछ कॉलम छोड़ना चाहता हूं जो काफी भारी हैं और अभी भी कॉलम के सबसेट को भौतिक रूप से पूरा करते हैं केस क्लासSlick 3.1 - केस क्लास
class AuditResultTable(tag: Tag) extends Table[AuditResult](tag, AuditResultTableName) {
def auditResultId: Rep[Long] = column[Long]("AuditResultId", O.PrimaryKey, O.AutoInc)
def processorId: Rep[Long] = column[Long]("ProcessorId")
def dispatchedTimestamp: Rep[Timestamp] = column[Timestamp]("DispatchedTimestamp", O.SqlType("timestamp(2)"))
def SystemAOutput: Rep[Array[Byte]] = column[Array[Byte]]("SystemAOutput", O.SqlType("LONGBLOB"))
def SystemBOutput: Rep[Array[Byte]] = column[Array[Byte]]("SystemBOutput", O.SqlType("LONGBLOB"))
def isSuccessful: Rep[Boolean] = column[Boolean]("IsSuccessful")
def * : ProvenShape[AuditResult] = (processorId, dispatchedTimestamp, systemAOutput, systemBOutput, isSuccessful, auditResultId) <>
(AuditResult.tupled, AuditResult.unapply)
}
val auditResults = TableQuery[AuditResultTable]
इसी मामले वर्ग:
case class AuditResult (
ProcessorId: Long,
DispatchedTimestamp: Timestamp,
SystemAOutput: Array[Byte],
SystemBOutput: Array[Byte],
IsSuccessful: Boolean,
AuditResultId: Long = 0L
)
और अंत में डेटा का उपयोग क्वेरी:
निम्न तालिका परिभाषा पर विचार करें
def getRecentFailedAuditsQuery(): Query[AuditResultTable, AuditResult, Seq] = {
auditResults.filterNot(r => r.isSuccessful)
}
मैं माना जाता है और में देखा विकल्प in this (outdated) answer और अन्य प्रस्तुत किए गए:
- डिफ़ॉल्ट प्रक्षेपण से भिन्न प्रक्षेपण होने के कारण जो "
AuditResult
के हल्के संस्करण" के लिए मानचित्र करता है, उदा।AuditResultLight
जो उन कॉलम को छोड़ देता है - मेरे सर्वोत्तम प्रयास के बावजूद मैं यह काम नहीं कर सका - मुझे लगता है कि यह सही दृष्टिकोण हो सकता है - एक बार जब मेरे पास "काम करने" प्रक्षेपण था, तब भी मुझे एक स्लिक् त्रुटि मिली "कोई मिलान आकार नहीं मिला। Slick को नहीं पता कि दिए गए प्रकारों को कैसे मैप करना है " - एक वर्ग पदानुक्रम का निर्माण एक सार
AuditResultTableBase
वर्ग और उससे प्राप्त होने वाले दो वर्गों में से एक - जो" भारी "कॉलम और उनके बिना एक जोड़ता है, दोनों अपने संबंधित डिफ़ॉल्ट प्रक्षेपण के साथ और केस कक्षाएं। यह अच्छी तरह से काम करता है, लेकिन दृष्टिकोण गलत लगता है और इस तरह की एक आसान चीज़ के लिए अपेक्षाकृत बड़े कोड परिवर्तन की आवश्यकता है। - केस कक्षाओं के बजाए ट्यूपल्स को मूर्तिकला बनाना - यह निश्चित रूप से काम करेगा, लेकिन मैं चाहता हूं कि मेरी डेटा एक्सेस परत दृढ़ता से टाइप की जाए।
इस समस्या के लिए Slick 3.1 के लिए बेवकूफ/सर्वोत्तम अभ्यास क्या है? क्या मैं इसके लिए एक कस्टम प्रक्षेपण का उपयोग कर सकता हूं और यदि ऐसा है तो SystemAOutput
और SystemBOutput
के साथ इस विशेष उदाहरण/क्वेरी के लिए यह कैसा दिखता है, जो भारी स्तंभ हैं जिन्हें मैं छोड़ना चाहता हूं?
धन्यवाद वोज्शिच - मैंने आशा की थी कि "एक" स्पष्ट रूप से सही उत्तर होगा, लेकिन ऐसा लगता है कि मुझे परेशानी होने वाला अकेला नहीं है। इस उपयोग के मामले के लिए आकार/मैपिंग को सही तरीके से कार्यान्वित करने के तरीके के बारे में अंतर्दृष्टि के लिए धन्यवाद (भले ही इंटेलिजे इसे पसंद न करे) - बक्षीस सब तुम्हारा है। – BrokenGlass