2015-09-07 8 views
5

Ich verwende Slick 3.1.0-M2 und ich möchte die java.time.LocalDate und java.time.LocalTime in meinen Tabellen verwenden. Ich mache es so:Erstellen Sie benutzerdefinierte Spaltenzuordnung für java.time.LocalDate mit Slick

So habe ich 3 implizite Zuordnungen, aber nur die erste kompiliert. Diejenigen, die mit java.sql.Date und java.sql.Time nicht die Zusammenstellung mit:

could not find implicit value for evidence parameter of type slick.driver.PostgresDriver.BaseColumnType[java.sql.Date] 

Wenn ich einen impliziten Parameter Inspektion in IntelliJ tun kann ich sehen, dass die erste Abbildung TimestampJdbcType in der Datei JdbcTypesComponent.scala findet . Gleich daneben sehe ich den TimeJdbcType und DateJdbcType. Wie kommt es, dass der erste gefunden wird, aber die anderen nicht?

Antwort

6

Wenn Sie die slick.driver.JdbcTypesComponentüberprüfen, werden Sie ein trait ImplicitColumnTypes enthält viele implicits für Spaltentyp, einschließlich finden:

implicit def timeColumnType = columnTypes.timeJdbcType 
implicit def dateColumnType = columnTypes.dateJdbcType 

Die beiden letzteren Sie tatsächlich haben den gleichen Namen definiert mit der Standardwerte.

Ändern der Name von ihnen oder Umbenennen der Standard beim Importieren funktioniert für mich.

import slick.driver.PostgresDriver.api._ 
import slick.driver.PostgresDriver.api.{ timeColumnType => DefaultTimeColumnType } 

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

implicit val timeColumnType = MappedColumnType.base[LocalTime, Time](
    localTime => Time.valueOf(localTime), 
    time => time.toLocalTime 
) 
+1

Ahh, ich glaube nicht, dass ich jemals diesen Fehler gefunden hätte, also ein großes Dankeschön! :) –