'da eşlik eden nesne ile eşlenen projeksiyon Yuvalanmış sınıflar/nesneler var ve bunları SLICK kullanarak bir veritabanında saklamak (ve almak) istiyorum. SLICK haritalı projeksiyonun anahtar olacağını anlıyorum. Ayrıca iç içe geçmiş nesneler ve düz yapı (DB tablosunda saklanacak) arasında eşlemek için bir eşlik eden nesne kullanıyorum. Bu (basitleştirilmiş örnekte) gibi bir şey yapmak istiyorum:SLICK
case class Foo(id: Int, myBar: Bar)
case class Bar(myInt: Int, myString: String)
object Foo {
def apply(id: Int, myInt: Int, myString: String): Foo = Foo(id, Bar(myInt, myString))
override def unapply(f: Foo) = (f.id, f.myBar.myInt, f.myBar.myString)
}
object TTable extends Table[Foo]("FOO") {
def id = column[Int]("id", O.PrimaryKey)
def myInt = column[Int]("myInt", O NotNull)
def myString = column[String]("myString", O NotNull)
def * = id ~ myInt ~ myString <> (Foo.apply _, Foo.unapply _)
def query(db: Database, id: Int): Option[Foo] = db withSession { //s: Session =>
(for { b <- TTable if b.id is id} yield b).firstOption
}
}
Ama derleme birkaç hatayla başarısız: "yöntemi uygulamasını kaldırma iki kez tanımlanır", "aşırı tanımına belirsiz başvuru, hem yöntem uygulamak [...] beklenen beklenen maç? " ve
"alternatifleri ile aşırı yöntem değeri <>" Ben bu mükemmel "scala slick method I can not understand so far" eşleştirilmiş projeksiyon açıklama ve "Mapped projection with <> to a case class with companion object in Slick" buldum ama önerilen çözümlerin hiçbiri benim için çalışıyor.
Çok teşekkürler Sonuçta, ne yapmak istemiyor anlama sahip zaten
unapply
etmektir. Gerçekten çok iyi çalışan ilk çözümünüzü tercih ederim. Ancak yaklaşık bir düzine parametre ile tüm haritalama pek çok boilerplate gibi görünüyor. SLICK'in Doğrudan Gömme işleminin daha kompakt olacağını ancak henüz eklemeye izin vermediğini anlıyorum. SLICK'in bu açıdan nasıl ilerleyeceğini görmek için sabırsızlanıyorum. – jans"Uygula" ve "unapply" öğelerini sorgunuzda açıklayabilseniz bile, yine de düzinelerce parametrenizle başa çıkmak zorunda kalacaksınız demektir? FWIW, son düzenlememe bak. – Faiz
Bir vaka sınıfı ve son düzenlemenizde, "başvuru" yöntemi için "aşırı yüklenme tanımına belirsiz bir başvuru" hatası alıyorum. Bu nedenle, eşlik eden nesnede yöntemi 'fromRow' olarak yeniden adlandırmak zorunda kaldım. – jans