Je suis nouveau sur Slick et j'ai du mal à obtenir le mapping de java.sql.date/time/timestamp mappé en jodatime.Types de colonnes de mappage Slick 3.1.1
trait ColumnTypeMappings {
val profile: JdbcProfile
import profile.api._
val localTimeFormatter = DateTimeFormat.forPattern("HH:mm:ss")
val javaTimeFormatter = new SimpleDateFormat("HH:mm:ss")
implicit val myDateColumnType = MappedColumnType.base[LocalDate, Date](
ld => new java.sql.Date(ld.toDateTimeAtStartOfDay(DateTimeZone.UTC).getMillis),
d => new LocalDateTime(d.getTime).toLocalDate
)
implicit val myTimeColumnType = MappedColumnType.base[LocalTime, Time](
lt => new java.sql.Time(javaTimeFormatter.parse(lt.toString(localTimeFormatter)).getTime),
t => new LocalTime(t.getTime)
)
implicit val myTimestampColumnType = MappedColumnType.base[DateTime, Timestamp](
dt => new java.sql.Timestamp(dt.getMillis),
ts => new DateTime(ts.getTime, DateTimeZone.UTC)
)
}
Dans l'auto généré Tables.scala I sur le mapping comme ceci:
trait Tables extends ColumnTypeMappings {
val profile: slick.driver.JdbcDriver
import profile.api._
import scala.language.implicitConversions
// + rest of the auto generated code by slick codegen
}
Et pour envelopper le tout-je utiliser cela comme ceci:
object TestTables extends Tables {
val profile = slick.driver.MySQLDriver
}
import Tables._
import profile.api._
val db = Database.forURL("url", "user", "password", driver = "com.mysql.jdbc.Driver")
val q = Company.filter(_.companyid === 1).map(._name)
val action = q.result
val future = db.run(action)
val result = Await.result(future, Duration.Inf)
Je reçois un NullPointerException on: implicite val myDateColumnType .... lors de l'exécution de ceci. J'ai vérifié que ce dernier bloc de code fonctionne si je supprime le mappage.
Bonjour, je ne l'ai pas essayer ur code, mais si u ont beaucoup de jodatime usages, u peux essayer slick pg, https://github.com/tminglei/slick-pg. Il fournit, jodatime et d'autres mapppings de type populaire. –