2016-05-08 11 views
1

Ich habe folgende Slick-Klasse, die ein Datum enthält:Sortieren einer Tabelle nach dem Datum in Slick 3.1.x

import java.sql.Date 
import java.time.LocalDate 

class ReportDateDB(tag: Tag) extends Table[ReportDateVO](tag, "report_dates") { 

    def reportDate = column[LocalDate]("report_date")(localDateColumnType) 

    def * = (reportDate) <> (ReportDateVO.apply, ReportDateVO.unapply) 

    implicit val localDateColumnType = MappedColumnType.base[LocalDate, Date](
    d => Date.valueOf(d), 
    d => d.toLocalDate 
) 

} 

Als ich nach dem Datum der Tabelle zu sortieren versuchen:

val query = TableQuery[ReportDateDB] 
    val action = query.sortBy(_.reportDate).result 

ich die folgenden Kompilierungsfehler

  • nicht genügend Argumente für die Methode sortBy: (implici t Beweis $ 2: slick.lifted.Rep [java.time.LocalDate] ⇒ slick.lifted.Ordered) slick.lifted.Query [fdic.ReportDateDB, fdic.ReportDateDB # TableElementType, Seq]. Nicht spezifizierter Wertparameterbeweis $ 2.

  • Keine implizite Ansicht verfügbar von slick.lifted.Rep [java.time.LocalDate] ⇒ slick.lifted.Ordered.

Wie die implizite Standardreihenfolge angeben?

+0

https://github.com/slick/slick/issues/627 kann – sap1ens

+0

helfen Ich kann nicht sehen, wie dies helfen kann – ps0604

Antwort

2

Sie benötigen implicit val localDateColumnType zur Verfügung, wo Sie die Abfrage ausführen zu lassen. Zum Beispiel wird diese Arbeit:

implicit val localDateColumnType = MappedColumnType.base[LocalDate, Date](
    d => Date.valueOf(d), 
    d => d.toLocalDate) 

val query = TableQuery[ReportDateDB] 
val action = query.sortBy(_.reportDate).result 

Ich bin nicht sicher, wo der beste Ort, dies zu bringen, aber ich in der Regel alle diese Umwandlungen in einem Paketobjekt setzen.

1

Es sollte wie beschrieben here arbeiten:

implicit def localDateOrdering: Ordering[LocalDate] = Ordering.fromLessThan(_ isBefore _) 
+0

Ich habe die implizite Deklaration direkt vor der OrderBy-Anweisung hinzugefügt und immer noch den gleichen Fehler erhalten. Irgendwelche Ideen? – ps0604

+0

Ich glaube, meine Antwort trifft hier nicht zu. Sie könnten versuchen, localDateColumnType in ein Companion-Objekt zu setzen und es in Ihre Client-Klasse zu importieren. – devkat

+0

Was ist LocalDateColumnType? Wie soll ich es benutzen? Können Sie ein Codebeispiel posten? – ps0604

0

Versuchen Sie, diese Zeile in der Importliste hinzu:

Import slick.driver.MySQLDriver.api._