Mit Slick versuche ich Datenbanktabelleneinträge direkt zu der Fallklasse zu projizieren, die sie darstellen. Im Anschluss an die example in the documentation, richte ich ein zugeordnetes Projektion mit dem <>
Betreiber:Mapped Projektion mit <> zu einer Fall-Klasse mit Companion-Objekt in Slick
case class SomeEntity3(id: Int, entity1: Int, entity2: Int)
val SomeEntityTable = new Table[SomeEntity3]("some_entity_table") {
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def entity1 = column[Int]("entity1")
def entity2 = column[Int]("entity2")
def * = id ~ entity1 ~ entity2 <> (SomeEntity3, SomeEntity3.unapply _)
}
Nun würde Ich mag einige statische Konstanten und Hilfsmethoden SomeEntity3 hinzuzufügen. Dazu erstelle ich ein Companion-Objekt. Aber sobald ich die Linie umfasse
object SomeEntity3
ein ziemlich wilder mehrzeiligen Fehler für die Definition erscheint von *
etwas zu sagen unleserlich über „überladene Methode Wert <> mit Alternativen“.
Wie verhält sich das Begleitobjekt zum bidirektionalen Mapping in Slick und kann ich mein Ziel irgendwie erreichen?
funktionierts, in der Tat. Eine Erklärung, warum die Rechtschreibung explizit angewendet wird, ist erforderlich und behebt das Problem hier? – notan3xit
Explizites Drehen der Methode apply in eine Funktion (eta-Erweiterung) ergibt "(Int, Int, Int) => SomeEntity3", d. H. Den Typ, an dem das Companion-Objekt an erster Stelle stehen sollte. Allgemeiner ausgedrückt, wenn die Anwendungsmethode eines Funktionsobjekts in ein "neues" Funktionsobjekt umgewandelt wird, erhält man denselben Typ wie bei der ursprünglichen Funktion. –
Aus irgendeinem Grund wird scalac verwirrt, wenn Sie ein Companion-Objekt haben und die Anwendung des Objekts nicht aufhebt. – pedrofurla