Я предполагаю, что вы используете lifted-embedding
с Silk.
Итак... Slick использует концепцию под названием lifted-embedding
, где ваши типы Scala являются lifted
(изменены в более специфичный для предметной области тип) с использованием подходящего конструктора Rep
для создания lifted-representation
вашего типа Scala. Теперь для каждого столбца типа Column[ T ]
есть подтип Rep[ T ]
, и должен существовать TypedType[ T ]
, который impliticty
требуется для любого запроса.
Ваш конкретный запрос filter
имеет следующую подпись:
def filter[T](f: (E) ⇒ T)(implicit wt: CanBeQueryCondition[T]): Query[E, E.TableElementType]
Здесь это неявное значение wt
типа CanBeQueryCondition[T]
является подтипом ( T ) => Column[ _ ]
и используется внутри для поднятия (преобразования) вашего значения type T
в Column[ T ]
. Итак... вам нужно иметь implicit
экземпляр CanBeQueryCondition[ DateTime ]
, чтобы выполнить этот запрос.
Помимо этого, для баз данных на основе JDBC по умолчанию поддерживаются только следующие примитивные типы.
Numeric types: Byte, Short, Int, Long, BigDecimal, Float, Double
LOB types: java.sql.Blob, java.sql.Clob, Array[Byte]
Date types: java.sql.Date, java.sql.Time, java.sql.Timestamp
Boolean
String
Unit
java.util.UUID
Это означает... что вам придется использовать java.sql.TimeStamp
.
Или вы можете написать свой собственный маппер, который предоставит все шаблоны, необходимые для вашего столбца DataTime
.
import scala.slick.driver.JdbcProfile.MappedColumnType
import java.sql.Date
import org.joda.time.DateTime
object MyCustomMappers {
implicit def dateTimeMapper = MappedColumnType.base[DateTime, Date] (
{ dateTime => new Date(dateTime.getMillis) },
{ date => new DateTime(date) }
)
}
Теперь в вашей схеме вы можете просто указать import MyCustomMappers._
, а затем определить столбцы типа DateTime
. Теперь вы можете делать почти все, что вы можете делать с этими встроенными типами.
person
sarveshseri
schedule
24.02.2015